Django: проблемы с загрузкой пользовательских фильтров в файле базового шаблона при использовании наследования шаблонов

При выполнении {% load custom_filters %} в шаблоне после {% extends "base.html" %} все работает нормально, но когда я перемещаю нагрузку в шаблон base.html, фильтр ведет себя странно. Это мой custom_filters.py:

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

# To cut off strings at a specified character, at first occurance. Example:
#   time = 19:30:12.123456
#   {{ time|cut:'.' }}
#   returns: 19:30:12
@register.filter
@stringfilter
def cut(string, cutoff_point):
    return string.split(cutoff_point, 1)[0]

Когда я загружаю его в «конечный шаблон», поведение соответствует ожидаемому. Если time = 19:30:12.123456, то {{ time|cut:'.' }} возвращает 19:30:12. Когда я загружаю его в base.html, возвращаемое значение равно 19:30:12123456, то же самое, что и ввод, но без «точки отсечки».

Кто-нибудь знает, почему?


person olofom    schedule 03.05.2012    source источник
comment
Отличный вопрос. Сэкономьте мне часы времени   -  person Philip007    schedule 04.06.2013


Ответы (1)


Вы должны поместить {% load ... %} в каждый шаблон, где вы хотите использовать свой собственный тег или фильтр.

В вашем случае также не рекомендуется вызывать фильтр cut, потому что этот фильтр уже существует (и используется для вырезания точки из строки).

person DrTyrsa    schedule 03.05.2012
comment
О, я, должно быть, пропустил это. Это объясняет, почему он вел себя странно. Но должен быть способ выполнить загрузку в базовом шаблоне, это идея включения/наследования - чтобы не писать один и тот же фрагмент кода в 100 местах. - person olofom; 03.05.2012
comment
Хорошо, имеет смысл. Ну тогда я должен просто загрузить его в каждый шаблон, в конце концов. Спасибо! - person olofom; 03.05.2012