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