Django: вложенные теги пользовательских шаблонов

#python #django #templates

#python #django #шаблоны

Вопрос:

Я написал 2 пользовательских тега шаблонов в Django. Цель состоит в том, чтобы использовать один пользовательский тег внутри другого. Разрешено ли это? Шаблон для пользовательского «внешнего» тега выглядит следующим образом:

 <ul>
    {% for type in types %}
         {% custom_internal_tag param1 %}
    {% endfor %}
</ul>
 

Что после рендеринга приводит к

Недопустимый тег блока: ‘custom_internal_tag’, ожидаемый ‘пустой’ или ‘endfor’

Разрешены ли вложенные пользовательские теги? Что может быть причиной такой ошибки?

Ответ №1:

Они определенно разрешены, но эта ошибка может возникнуть из-за того, что ваш пользовательский тег неправильно определен, расположен или загружен.

Убедитесь, что все ваши пользовательские теги расположены в вашем app/templatetags каталоге и загружены правильно, обычно с помощью @register декоратора.

Reference: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-custom-filters

Комментарии:

1. Действительно, мой шаблон для внешнего тега не содержал кода {% load internal_tag %}.

2. В моем случае — когда некоторые пользовательские теги включают другие пользовательские теги, скажем: {% tag_from_lib1 %} {% tag_from_lib2 %} {% endtag_from_lib1 %} — Мне пришлось сначала загрузить lib2 , а затем lib1 , т. Е. Мне пришлось перейти {% load lib2 lib1 %} на {% load lib2 %} {% load lib1 %} . В противном случае возникает ошибка «недопустимый тег блока».