Почему мой шаблонный тег в Django не работает? - PullRequest
3 голосов
/ 10 февраля 2011
{% gen_aws "hello" %}

В моем файле я делаю это:

#I want to add "goodbye" to every word passed to this tag.
@register.tag(name="gen_aws")
def gen_aws(s):
    return s + "goodbye"

Файл .py в порядке ... Я включаю все нормально.У меня есть другие шаблоны "фильтры" там, которые работают нормально.Но затем я добавил это в этот файл, и этот шаблон тега не работает.

Ответы [ 2 ]

9 голосов
/ 10 февраля 2011

Ваше описание «не работает» не очень точное (точнее, его не существует).Но я предполагаю, что вы получаете ошибку, потому что тег не найден.

В документации четко указано, что вам нужен модуль "templatetags" в вашем приложении с подмодулем типа "mytags",например.Затем вы должны включить эти теги в каждый шаблон, который хотите использовать.Вы можете сделать это с помощью {% load mytags %}.

Модуль «mytags» содержит тэг «gen_aws».

EDIT: Ошибка «gen_aws () принимает точно1 аргумент (2 дано) "происходит потому, что обычные теги могут анализировать свои параметры очень настраиваемым способом.Поэтому они получают аргументы "парсер" и "токен".В вашем случае, так называемого простого тега 1013 * должно быть достаточно - Django автоматически анализирует параметры и передает их как значения Python.Так что просто замените @register.tag на @register.simple_tag.

5 голосов
/ 10 ноября 2014

Другая возможная причина ошибки "no attribute 'must_be_first'" заключается в том, что вы забыли наследовать от django.template.Node в своем классе.(Поскольку это почти единственный результат Google для этой фразы, я подумал, что добавлю это здесь, чтобы сэкономить пару минут для следующего человека.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...