Переменная цикла 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 %}

Это дает вам доступ ко всем loops свойства, и, для меня, делает более понятным во включенном шаблоне, что это за переменная.

Другие вопросы по тегам