Jinja的循环变量在包含的模板中不可用

2024-09-30 12:16:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的一个jinja模板中,我有类似于下面的代码

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

它应该呈现posts集合内的每个post,具体取决于post的.type。我为每个post.type设置了不同的模板。对于那些我没有模板的人,它将恢复为defaultpost模板。在

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

那么,loopincluded模板中不可用吗?这是故意的吗?我是不是在组织我的模板时出了什么问题?在

编辑好的,我在for循环中想出了一个解决方法,在我包含模板之前,我确实做到了

^{pr2}$

并在post模板中使用post_index。不理想,但似乎是唯一的办法。不过,我还是想知道你的解决办法。在

编辑2还有一件事,我可以访问included模板中的post变量,但不能访问loop变量。在


Tags: 代码inloop模板default编辑forinclude
2条回答

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

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

这使您可以访问loop的所有属性,而且对我来说,在包含的模板中可以更清楚地看到变量是什么。在

If可能与^{}语句一起使用。在

试试这个:

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

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

相关问题 更多 >

    热门问题