First written: 22-11-21
Uploaded: 22-11-28
Last modified: 23-02-27
django 코드들을 보다보면 {{ value | filter }}
이런 식으로 |
를 사이로 두고 두 가지 값이 적힌 경우들을 볼 수 있다. 왼쪽은 우리가 익히 알던 것으로 서버에서 넘어온 값을 뜻하고, 오른쪽은 해당 값에 대해 어떤 filter를 적용할지에 대해 적어둔 것이다. 해당 필터들은 50여 가지가 존재하며 django template이 기본으로 제공해주는 것이므로 django 문법을 따라야 한다. 본 글에서는 50개를 전부 다 보기보다는 자주 쓰일만한 것들만 골라서 filter들을 살펴보자.
{{ value|add:"2" }}
넘어온 value에 숫자를 더해준다. value가 10이었다면 클라이언트에 표시되는 값은 12가 될 것이다.
만일 value와 filter쪽에 있는 값 모두 list인 경우 둘이 합쳐진다.
index값 같은 경우가 0부터 시작하는 경우가 많아 그럴 때 사용해도 좋겠다는 생각이 든다.
{{ value|capfirst }}
넘어온 value의 첫 글자를 대문자로 바꿔준다.
비슷하게 사용할 수 있는 필터로 lower
, title
, upper
가 있다.
{{ value|cut:" " }}
value 내에 있는 string 중 cut에서 지정한 것들을 모두 없애준다.
현재 같은 설정일 경우 띄어쓰기가 모두 무시된 결과가 표시될 것이다.
{{ value|date:"D d M Y" }}
넘어온 datetime object
value에 대해서 지정된 날짜 형식으로 변환해 표기해준다.
굳이 서버에서 처리를 하지 않아도 편하게 사용할 수 있어 유용하다.
{{ value|default:"nothing's sent from server" }}
value의 값이 False로 '평가'될 때 무엇을 보여줄지에 대한 코드이다.
비슷한 filter로는 default_if_none
이 있다.
{{ value|divisibleby:"3" }}
value 값이 filter에 있는 값으로 나누어 떨어지느냐 아니냐를 체크할 때 쓴다.
django template에서 %
를 사용할 수 없어 아주 자주 쓰이는 필터다.
반환하는 값은 True
, False
인데, 직접적으로 이 값들을 화면에 표시하기보다는 아래와 같이 쓰이는 경우가 많다.
{% for person in persons %}
<div>
{{ person }}
</div>
{% if forloop.counter|divisibleby:7 %}
<span>hello! lucky man</span>
{% endif %}
{% endfor %}
{{ value|escape }}
말 그대로 넘어온 value의 escape를 해준다. Escape란 간단히 말해서 특수문자를 HTML entity로 바꿔주는 행위를 뜻한다. 이를테면 <
를 <
로 변환할 수 있는데 이러한 행위를 escape라고 한다. 보안상의 목적 혹은 html 코드 문제 때문에 escape를 하곤 한다.
보통은 서버에 저장할 때부터 데이터를 escape하는 경우가 있어, 필요 없을 수도 있다.
{{ value|filesizeformat }}
value로 넘어온 숫자를 file size로 변환해준다.
123456789가 넘어오면 '117.7 MB'라고 표시된다.
123456789가 왜 '123.4MB'가 아니라 '117.7 MB'인가요? CS를 공부해봅시다. :)
{{ value|first }}
넘어온 list value의 첫 번째 값을 표시해준다.
비슷한 필터로 last도 있다.
{{ value|floatformat:3 }}
소수점 몇 번째 자리까지 보여줄지를 결정해주는 필터다.
숫자가 많이 표시되는 페이지를 다룰 때 아주 유용하다.
{{ value|join:" // " }}
Python의 str.join(list)와 같은 역할을 한다.
카테고리 같은 것들을 list로 전달받는 때 등에 유용하다.
{{ value|length }}
string이나 list의 length를 표시해준다.
비슷한 용도로 length_is
, wordcount
등이 있다.
{{ value|linebreaks }}
plain text를 HTML에 맞게 고쳐준다. 주로 <br>
과 <p>
등 태그의 도움을 받는다.
{{ value|make_list }}
value를 list로 만들어준다.
만일 value가 'Hola'면 ['H', 'o', 'l', 'a']
가 생성되는 식이다.
{{ value|pluralize }}
만일 value가 2 이상이면 복수형태로 바꿔준다. 즉, 's'를 붙여준다.
{{ value|random }}
주어진 list value 중 랜덤한 item 하나를 표시해준다.
{{ value|slice:":2" }}
list value를 slice 해준다.
{{ value|slugify }}
Converts to ASCII. Converts spaces to hyphens. Removes characters that aren’t alphanumerics, underscores, or hyphens. Converts to lowercase. Also strips leading and trailing whitespace.
Django 공식 문서에 나온 설명이다. 우리가 일반적으로 보는 알파벳과 다른 것들을 알파벳화해주고, 띄어쓰기는 -
으로 변경해주는 등의 역할을 하여 URL을 만들 때 유용하다.
{{ value|time:"H:i" }}
주어진 value를 적절한 time format으로 변환시켜주는 필터다.
딱 보더라도 아주 유용하다.
{{ value|timesince:value2 }}
두 date value가 얼마나 차이나는지를 표기해준다.
역시나 아주 유용하다.
비슷한 필터로 timeuntil
이 있다.
{{ value|truncatechars:5 }}
주어진 string을 몇 번째 글자까지 보여주고 자를지를 결정하는 필터다.
이를테면 value가 'Hello everyone. I am the king.'이라면, 화면에는 'Hell...'이 표시될 것이다.
글자가 아니라 단어를 기준으로 자르는 truncatewords
도 있다.
{{ value|unordered_list }}
설명보다는 예시가 더 이해가 빠른 필터다.
value가 만일 ['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]
라면, 보여지는 HTML은 아래와 같다
<li>States
<ul>
<li>Kansas
<ul>
<li>Lawrence</li>
<li>Topeka</li>
</ul>
</li>
<li>Illinois</li>
</ul>
</li>
{{ value|yesno:"yeah,no,maybe" }}
True인지 False인지, 혹은 그도 아니라면 None인지에 따라 보여줄 값을 정해둘 수 있다.
아주 많이 쓰인다.
참고 사이트 :
Django document: Built-in template tags and filters