커스텀 템플릿태그(templatetags)
템플릿에서 다양한 기능을 수행하는 커스텀태그를 만들 수 있음
project명/app명/templatetags 디렉토리에 모듈파일 생성
-> templatetags 디렉토리명은 절대 바뀌면 안됨.
-> 모듈명은 마음대로 생성가능하나 다른 앱의 모듈과도 이름이 같아서는 안된다. (위치와 상관없이 모듈명으로 로드되기 때문에 충돌발생)
○ 디렉토리 경로
project/
apps/
templatetags/
custom_tag.py
__init__.py
models.py
view.py
● 커스텀태그 모듈 (custom_tag.py)
1. filter
- template에서 사용할 필터 정의
from django import template
register = template.Library()
@register.filter
def lower(value):
return value.lower()
{% load custom_tag %}
<div>{{ variable|lower }}</div>
2. simple_tag
- 단순히 특정값을 출력함
from django import template
register = template.Library()
@register.simple_tag
def current_time():
return datetime.now().strftime("%Y-%m-%d %H:%M")
{% load custom_tag %}
<div>The time is {{ current_time }}</div>
3. inclusion_tag
- 다른 템플릿을 포함시킴
from django import template
register = template.Library()
@register.inclusion_tag('link.html', takes_context=True)
def jump_link(context):
return {
'link' : context['home_link'],
'title' : context['home_title'],
}
→ tag를 사용하는 템플릿(index.html)의 context의 값을 가져와 호출하는 템플릿(results.html)으로 전달가능
# index.html
{% load custom_tag %}
<div>{{ jump_link }}</div>
# link.html
Jump directly to <a href="{{ link }}">{{ title }}</a>.
● template.html
{% load custom_tag %} // {% load 모듈명 %} 으로 템플릿에서 호출