티스토리 뷰

Django Template Filter

- 템플릿 변수값 변환을 위한 함수이며, 다수 필터 함수를 연결 가능

- {{ var|filter1 }}, {{ var|filter2:인자 }}, {{ var|filter3:인자|filter4 }} # | (파이프)를 통해 연결

  파이프 앞에 있는 인자가 filter2의 첫번째 인자, :(콜론) 뒤에 인자가 두번째 인자 로 지정 {{ var|filter3:인자|filter4 }}의 경우 앞서 결친 인자가 filter4    로 지정됨.

- 빌트인 Filter가 지원되며, 장고앱 별로 커스텀 Filter 추가 가능 

- date, time, timesince, timeuntil, default, default_if_none,join, length, linebreaks, linebreaksbr, pprint, random, safe,slice, striptags, truncatechars, truncatechars_html,truncatewords, truncatewords_html, urlencode, urlize 등



날짜/시각 출력형식 지정

date filter #ref / time filter #ref

• 지정포맷으로 출력

• PHP의 date() 포맷 과 유사

{{ datetime_obj|date:"D d M Y" }} => 'Wed 09 Jan 2008'

settings.py 값 참조 {{ datetime_obj|date:"DATE_FORMAT" }} => 디폴트 'N j, Y' (e.g. Feb. 4, 2003)

settings.py 값 참조 {{ datetime_obj|date:"DATETIME_FORMAT" }} => 디폴트 'N j, Y, P' (e.g. Feb. 4, 2003, 4 p.m.)

settings.py 값 참조 {{ datetime_obj|date:"SHORT_DATE_FORMAT" }} => 디폴트 'm/d/Y' (e.g. 12/31/2003)

settings.py 값 참조 {{ datetime_obj|date:"SHORT_DATETIME_FORMAT" }} => 디폴트 'm/d/Y P' (e.g. 12/31/2003 4 p.m.)

settings.py 값 참조 {{ datetime_obj|time:"TIME_FORMAT" }} => 디폴트 'P' (e.g. 4 p.m.)

• DATE_FORMST, DATETIME_FORMAT,

SHORT_DATE_FORMAT, SHORT_DATETIME_FORMAT은 프로젝트 settings 내에서 재정의

• {{ datetime_obj|date }} 와 같이 인자가 지정되지 않을 경우, DATE_FORMAT 설정이 사용됨.


# python code

from django.utils import timezone

timezone.now()

timezone.now().strtime('%Y-%m-%d %H:%m:%S")

2017-12-10 20:50:30


timesince filter  / timeuntil filter  # 특정시간까지 얼마나 남았는지

{{ past_dt|timesince }} => 현재시각 기준 (now - past_dt)

{{ past_dt|timesince:criteria_dt }} => 기준시각 기준 (criteria_dt - past_dt)

{{ future_dt|timeuntil }} => 현재시각 기준 (future_dt - now)

{{ future_dt|timeuntil:past_dt}} => 기준시각 기준 (future_dt - past_dt)

• timesince : 과거시각 (past_dt) (1 June 2006), 기준시각 (08:00 on 1 June 2006) 일 경우 : "8 hours" 출력

timezone 정보가 없는 (offset-naive) datetime object와 timezone 정보가 있는 (offset-aware) datetime object를 서로 비교할 경우, 빈 문자열을 출력

from django.utils import timezone

timezone.now()  # 타임존 존재

import datetime

datetime.datetime.now() # 타임존 존재 하지 않음

datetime.datetime(2017, 12, 10, 0) # UTC

datetime.datetime(2017, 12, 10, 9) # Asia/Seoul

datetime.datetime(2017, 12, 10, 0) == datetime.datetime(2017, 12, 10, 9)

FALSE  

! Django에서는 timezone.now()로 현재시간 획득 할 것 


default filter / default_if_none filter

• default : 값이 False일 경우, 지정 디폴트값으로 출력

• 값이 None이거나 빈 문자열/리스트/튜플 등  # bool(None), boot(''), bool([]), bool(()),bool({}), boot(set())

• default_if_none : 값이 None일 경우, 지정 디폴트값으로 출력

{{ value|default:"nothing" }}

{{ value|default_if_none:"nothing" }} 


join filter

• 순회가능한 객체를 지정 문자열로 연결

• 파이썬의 str.join(list)과 동일

{{ value|join:" // " }} => ['a', 'b', 'c'] 일 경우, "a // b // c"를 출력


length filter

• value의 길이를 출력

• 파이썬의 len(value)과 동일

• Undefined 변수일 경우 0을 출력

{{ value|length }} => ['a', 'b', 'c', 'd'] 일 경우 4 를 출력

------------------

 len(value)


linebreaks filter

• 빈 줄은 단위로 <p>태그로 감싸고, 개행1개는 <br>태그로 출력

value = "Joel\nis a slug"

{{ vaule|linebreaks }}

<p>Joel<br/>is a slug</p>


linebreaksbr filter

• 모든 개행을 <br>태그로 출력

value = "Joel\nis a slug"

{{ vaule|linebreaks }}

Joel<br/>is a slug


pprint filter 

• pprint.pprint() 래핑

디버깅 목적


random filter

• 지정 리스트에서 랜덤 아이템을 출력

{{ value|random }} => ['a', 'b', 'c', 'd'] 일 경우 'b' 출력 가능


safe filter  # 댓글내 자바스크립트, 이미지 필드 단순 문자열로 출력이 됨 (태그로 동작하지 않도록)

• HTML Escaping이 수행되지 않도록, 문자열을 SafeString으로 변환

• autoescaping이 off로 지정될 경우, 이 필터는 작동하지 않음.


slice filter 

• 슬라이싱된 리스트를 출력

파이썬의 리스트 슬라이싱 문법과 동일

{{ some_list|slice:":2" }} => ['a', 'b', 'c']일 경우 ['a', 'b']

mylist=['a','b','c']

mylist[1:-1]


striptags filter 

• [X]HTML 태그를 모두 제거하지만, non valid HTML 일 경우 제거가 되지 않을 수 있음.

• 좀 더 견고한 제거가 필요하다면, bleach 파이썬 라이브러리 (clean메소드) 출력

value = "<b>Joel</b> <button>is</button> a <span>slug</span>"

{{ value|striptags }} => "Joel is a slug".


truncatechars filter / truncatechars_html filter  ## 게시판 글자를 보여줄때 게시물의 제목만 모아서 보여줄때 글자 제한 처리

• truncatechars : 문자열을 지정 글자갯수까지 줄이며, 줄여질 경우 끝 에 "..."를 추가

• truncatechars_html : html태그를 보호하면서, 문자열을 지정 글자 갯수까지 줄이며, 줄여질 경우 끝에 "..."를 추가

value1 = "Joel is a slug"

value2 = "<p>Joel is a slug</p>"

{{ value1|truncatechars:9 }} => "Joel i..."

{{ value2|truncatechars_html:9 }} => "<p>Joel i...</p>"


truncatewords filter / truncatewords_html filter

• truncatewords : 문자열을 지정 단어갯수까지 줄이며, 줄여질 경우 끝 에 "..."를 추가

• truncatewords_html : html태그를 보호하면서, 문자열을 지정 단어 갯수까지 줄이며, 줄여질 경우 끝에 "..."를 추가

value1 = "Joel is a slug"

value2 = "<p>Joel is a slug</p>"

{{ value1|truncatewords:2 }} => "Joel is ..."

{{ value2|truncatewords_html:2 }} => "<p>Joel is ...</p>"


urlencode filter 

• 지정값을 urlencode 처리

value = "https://www.example.org/foo?a=b&c=d"

{{ value|urlencode }} => "https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"


urlize filter

• URL 문자열과 이메일주소 문자열을 클릭가능한 링크로 변환/출력

 URL일 경우

• 문자열이 http://, https://, www. 로 시작할 경우 변환

• 문자열이 도메인만 지정되었을 경우, 최상위 도메인이 .com, .edu, .gov, .int, .mil, .net, .org 일 경우 변환

• 생성된 URL에는 rel="nofollow" 속성이 추가

• https://goo.gl/aia1t 는 변환되나, goo.gl/aia1t 는 변환 불가

value1 = "Check out www.djangoproject.com"

value2 = "Send questions to foo@example.com"

{{ value1|urlize }}

=> "Check out <a href="http://www.djangoproject.com" rel="nofollow">

www.djangoproject.com

</a>"

{{ value2|urlize }}

=> "Send questions to <a href="mailto:foo@example.com">foo@example.com</a>"




"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""

반응형

'Python > * Django' 카테고리의 다른 글

16. CSRF(Cross-Site Request Forgery)  (0) 2017.12.15
15. HTML Form  (0) 2017.12.15
13. Django 템플릿 엔진 - 템플릿 태그  (0) 2017.12.15
12. URL Reverse  (0) 2017.12.13
11. Django Template Loader  (0) 2017.12.13
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함