14

我的 jinja 模板之一中有类似于以下的代码

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

根据帖子的不同,它应该post在集合中呈现每个。我为每个. 对于那些我没有模板的人,它会恢复为帖子模板。posts.typepost.typedefault

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

那么,是loop不是在included模板中不可用?这是设计使然吗?我在组织模板的方式上是否做错了,以使其不可用?

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

{% set post_index = loop.revindex %}

post_index在帖子模板中使用。不理想,但似乎是唯一的方法。不过,我仍然想知道您的解决方案。

编辑 2另一件事,我可以访问d 模板中的变量,但不能访问该post变量。includeloop

4

2 回答 2

8

如果有可能的{% with %}话。

尝试这个:

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

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

于 2012-01-11T12:08:59.170 回答
1

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

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

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

于 2014-09-03T15:40:26.353 回答