首页 文章

Jinja的循环变量在include-d模板中不可用

提问于
浏览
12

我的一个jinja模板中的代码与以下内容类似

{% for post in posts %}
    {% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}

它应该在 posts 集合中呈现每个 post ,具体取决于帖子的 .type . 我为每个 post.type 设置了不同的模板 . 对于那些我没有模板的人,它会恢复到 default 帖子模板 .

现在,我希望帖子的索引从帖子模板的底部显示,由 loop.revindex 提供 . 但由于某种原因,如果我在帖子模板中使用 loop.revindex ,我会收到错误说 UndefinedError: 'loop' is undefined .

那么, loopinclude d模板中不可用吗?这是设计的吗?我是否在组织模板以使其无法使用时出错?

Edit 好的,我在for循环中提出了一个解决方法,在我包含模板之前,我做了

{% set post_index = loop.revindex %}

并在帖子模板中使用 post_index . 不理想,但似乎是唯一的方式 . 我仍然想知道你的解决方案 .

Edit 2 另一件事,我能够访问 include d模板中的 post 变量,但不能访问 loop 变量 .

2 回答

  • 1

    如果可能使用{% with %}语句 .

    试试这个:

    {% with %}
        {% set loop_revindex = loop.revindex %}
        {% include ... %}
    {% endwith %}
    

    不要在包含的模板中使用 loop.revindex ,而是使用 loop_revindex .

  • 5

    另一种选择是通过将局部变量设置为 loop 将整个 loop 变量传递到包含的模板中

    {% for post in posts %}
        {% set post_loop = loop %}
        {% include ["posts/" + post.type + ".html", "posts/default.html"] %}
    {% endfor %}
    

    这使您可以访问所有 loop 属性,对我来说,在包含的模板中使变量更清晰 .

相关问题