Jinja的循环变量在包含的模板中不可用
我在我的一个jinja模板中有类似下面的代码
{% for post in posts %}
{% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}
这个代码的目的是根据每个post
的类型,从posts
集合中渲染出每个帖子。我为每种post.type
设置了不同的模板。而那些没有模板的帖子,则会使用default
的帖子模板。
现在,我想在帖子模板中显示从底部开始的帖子索引,这个索引是通过loop.revindex
提供的。但不知为什么,如果我在帖子模板中使用loop.revindex
,就会出现一个错误,提示UndefinedError: 'loop' is undefined
。
所以,loop
在被include
的模板中不可用吗?这是设计使然吗?还是说我在组织模板时做错了什么,导致它不可用?
编辑 好吧,我想出了一个变通办法,在for循环中,在包含我的模板之前,我这样做
{% set post_index = loop.revindex %}
然后在帖子模板中使用post_index
。虽然这不是最理想的办法,但似乎是唯一的解决方案。不过我还是想知道你们的解决办法。
编辑 2 还有一件事,我可以在被include
的模板中访问post
变量,但无法访问loop
变量。
2 个回答
2
另一种选择是通过将一个本地变量设置为 loop
,把整个 loop
变量传递到包含的模板中。
{% for post in posts %}
{% set post_loop = loop %}
{% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}
这样你就可以访问到所有 loop
的属性,对我来说,这样在包含的模板中更清楚这个变量是什么。
9
你可以试试用 {% with %}
这个语句。
可以这样做:
{% with %}
{% set loop_revindex = loop.revindex %}
{% include ... %}
{% endwith %}
在被包含的模板里,不要用 loop.revindex
,而是用 loop_revindex
。