8번째 줄: |
8번째 줄: |
| 특수기능을 사용할 때 외엔 그닥 쓰이지 않는다. | | 특수기능을 사용할 때 외엔 그닥 쓰이지 않는다. |
| | | |
− | ==탬플릿 필터==
| + | =탬플릿 필터= |
| 파이프문자를 사용하여 함수처럼 작용한다. | | 파이프문자를 사용하여 함수처럼 작용한다. |
| | | |
23번째 줄: |
23번째 줄: |
| |- | | |- |
| |<code><nowiki>|safe</nowiki></code> | | |<code><nowiki>|safe</nowiki></code> |
− | |XSS를 막기 위해 HTML에서 쓰이는 문자들은 자동으로 이스케이프 처리한다. | + | |view에서 텍스트 데이터를 가공해 보내면 html 안에서 "내용" 형식으로 담긴다. |
| + | XSS를 막기 위해 HTML에서 쓰이는 문자들을 자동으로 이스케이프 처리하는 것이다. |
| 하지만, HTML태그를 그대로 사용해야 할 때가 있는데, safe필터를 사용하여 해당부분의 제한만 풀거나 {%autoescape%}태그를 사용하여 {%endautoescape%} 사이의 이스케이프를 방지한다. | | 하지만, HTML태그를 그대로 사용해야 할 때가 있는데, safe필터를 사용하여 해당부분의 제한만 풀거나 {%autoescape%}태그를 사용하여 {%endautoescape%} 사이의 이스케이프를 방지한다. |
| |- | | |- |
− | |<code><nowiki>|default:"문자열"</nowiki></code> | + | | |
− | |값이 없거나 False인 경우 대체할 문자열을 지정한다. | + | | |
| |- | | |- |
− | |<nowiki>|truncatechars:숫자</nowiki> | + | | |
− | |제목이 길어질 때 특정 숫자의 글자만 나타내고 싶을 때 사용한다. | + | | |
| |- | | |- |
| |<nowiki>|timesince</nowiki> | | |<nowiki>|timesince</nowiki> |
39번째 줄: |
40번째 줄: |
| 각종 필터함수를 만들 수도 있지만 기능에 관련한 것들은 가능하면 view에서 처리하는 편이 디자이너와의 협업에 좋다. | | 각종 필터함수를 만들 수도 있지만 기능에 관련한 것들은 가능하면 view에서 처리하는 편이 디자이너와의 협업에 좋다. |
| | | |
− | == 커스텀 필터 만들기 == | + | === 문자열 관련 === |
| + | {| class="wikitable" |
| + | !필터 |
| + | !설명 |
| + | |- |
| + | |<code><nowiki>|default:"문자열"</nowiki></code> |
| + | |값이 없거나 False인 경우 대체할 문자열을 지정한다. |
| + | |- |
| + | |<nowiki>|truncatechars:숫자</nowiki> |
| + | |제목이 길어질 때 특정 숫자의 글자만 나타내고 싶을 때 사용한다. |
| + | 잘린 부분이 있을 때 '...'으로 나타낸다. |
| + | |- |
| + | |<nowiki>|truncatewords:숫자</nowiki> |
| + | |특정 개수의 단어만 나타내고 싶을 때. |
| + | |- |
| + | |<nowiki>|linebreaks</nowiki> |
| + | |마크다운을 사용하지 않고 줄바꿈만 반영하고 싶을 때. |
| + | |- |
| + | |<nowiki>|slice</nowiki> |
| + | |truncatechars 값이 2일 때 1글자만 나타내고 '...'으로 정리해버린다. |
| + | |
| + | 2글자 다 나타내고 싶을 땐 slice를 사용하는 게 좋다. |
| + | |
| + | 다음처럼 사용하기도 한다. <code><nowiki>{{값|slice:2}}</nowiki>{% if 값|length > 2 %}...{% endif %}</code> |
| + | |} |
| + | = 커스텀 필터 만들기 = |
| 놀랍게도 탬플릿 필터 안에 뺄셈이 없다. 하여간, 이런저런 경우 커스텀 필터를 만들어주어야 하는 경우가 생기는데, 빼기 필터를 만들 경우, 다음과 같이 진행한다. | | 놀랍게도 탬플릿 필터 안에 뺄셈이 없다. 하여간, 이런저런 경우 커스텀 필터를 만들어주어야 하는 경우가 생기는데, 빼기 필터를 만들 경우, 다음과 같이 진행한다. |
| {| class="wikitable" | | {| class="wikitable" |
56번째 줄: |
82번째 줄: |
| | | |
| | | |
− | @register.filter | + | @register.filter() |
| def sub(value, arg): | | def sub(value, arg): |
| return value - arg | | return value - arg |
81번째 줄: |
107번째 줄: |
| * 앱 안에 <code>templatetags</code> 디렉터리를 만든다. | | * 앱 안에 <code>templatetags</code> 디렉터리를 만든다. |
| * 이 디렉터리 안에 <code>custom_tags.py</code>를 만든다.(이름은 짓기 나름) | | * 이 디렉터리 안에 <code>custom_tags.py</code>를 만든다.(이름은 짓기 나름) |
| + | * @register 안의 경로는, 해당 필터를 구현할 html 경로를 지정한다. |
| |<syntaxhighlight lang="python"> | | |<syntaxhighlight lang="python"> |
| from django import template | | from django import template |
96번째 줄: |
123번째 줄: |
| |탬플릿 안에서 필터를 불러온 후 사용한다. | | |탬플릿 안에서 필터를 불러온 후 사용한다. |
| | | |
− | | + | * custom_tags는 필터를 저장한 파일명이다. |
− | 하고 나면 탬플릿 파일이 없다는 에러가 뜰텐데, 적절히 만들어주면 끝.
| |
| |<syntaxhighlight lang="html+django"> | | |<syntaxhighlight lang="html+django"> |
| {% load custom_tags %} | | {% load custom_tags %} |