Переменная цикла Jinja недоступна в шаблонах include-d
У меня есть код, похожий на следующий в одном из шаблонов jinja
{% for post in posts %}
{% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}
который должен отображать каждый post
внутри коллекции posts
, в зависимости от .type
сообщения. У меня есть другая настройка шаблона для каждого post.type
. И для тех, у кого нет шаблона, он возвращается к шаблону post default
.
Теперь я хочу, чтобы индекс сообщения отображался снизу, внутри шаблонов сообщений, который предоставляется loop.revindex
. Но по какой-то причине, если я использую loop.revindex
внутри шаблона сообщения, я получаю сообщение об ошибке UndefinedError: 'loop' is undefined
.
Итак, loop
недоступен в шаблонах include
d? Это по дизайну? Я делаю что-то неправильно с тем, как я организовал свои шаблоны, чтобы это было недоступно?
Изменить Хорошо, я применил обходной путь в цикле for, прежде чем включать свой шаблон, я делаю
{% set post_index = loop.revindex %}
и используйте post_index
внутри шаблона сообщения. Не идеальный, но, похоже, единственный способ. Я все еще хочу знать ваши решения.
Изменить 2. Еще одна вещь: я могу получить доступ к переменной post
внутри шаблона include
d, но не к переменной loop
.
Ответы
Ответ 1
Если это возможно с помощью оператора {% with %}
.
Попробуйте следующее:
{% with %}
{% set loop_revindex = loop.revindex %}
{% include ... %}
{% endwith %}
Вместо использования loop.revindex
в включенном шаблоне используйте loop_revindex
.
Ответ 2
Другой вариант - передать всю переменную loop
во включенный шаблон, установив локальную переменную в loop
{% for post in posts %}
{% set post_loop = loop %}
{% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}
Это дает вам доступ ко всем свойствам loop
и, как мне кажется, делает более понятным в включенном шаблоне значение переменной.