Создание модуля templatetags
Первое что нужно сделать, это создать модуль templatetags
в приложении, а затем разместить в нем файл __init__.py
. Или можносделать отдельное приложение специально для фильтров и/или тегов. В таком случае, нужно обязательно его зарегистрировать в settings.py
.
Следующий шаг - создать файл myfilters.py
в модуле templatetags. Имя файло может быть любым, но оно бедет в последствие использовано в шаблонах. Затем нужно импортировать модуль template и инстанциировать декоратор. При использовании декоратора нужно указать опцию safe. Если установить её в True то Django не будет эскейпить вывод, так что будте осторожны и в боевых условиях всегда проверяйте html перед выводом.
from django import template
register = template.Library()
@register.filter(safe=True)
def mysite_link(publisher):
if publisher == "Me":
return '<a href="http://mysite.com">%s</a>' % publisher
else:
return publisher
Использовать фильтр следует так: {{ article.publisher | mysite_link }}
. Однако перед этим, в начале шаблона, нужно включить директиву {% load myfilters %}
. Причем имя myfilters не случайно - именно так мы назвали наш файл с функциями фильтров.
Рассмотрим ещё один пример, но на этот раз с параметром.
Во всё том же myfilters.py
:
@register.filter(is_safe=True):
def youtube_embed(url, hd=False):
if hd:
get_youtube_hd_embed(url):
else:
return get_youtube_sd_embed(url):
Этот фильтр работает вот так: {{ video_link|youtube_embed "True" }}