티스토리 뷰
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 |