Переменная цикла 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 и, как мне кажется, делает более понятным в включенном шаблоне значение переменной.