This question already has answers here:
Jinja2: Change the value of a variable inside a loop
(3个答案)
4年前关闭。
我想在Jinja2模板中为循环设置一个标记,然后根据该标记显示或不显示某些内容,如下所示:
但是,这似乎是不可能的,并且循环内的
有什么方法可以仅使用模板代码来执行此操作,而无需再次遍历所有foos吗?
(3个答案)
4年前关闭。
我想在Jinja2模板中为循环设置一个标记,然后根据该标记显示或不显示某些内容,如下所示:
{% set foobar = False %}
{% for foo in foos %}
[... render the foo here ...]
{% if foo.bar %}
{% set foobar = True %}
{% endif %}
{% endfor %}
[...]
{% if foobar %}
At least one of the foos is bar!!!
{% endif %}
但是,这似乎是不可能的,并且循环内的
foobar
设置与循环外的foo.bar
不同。即使foobar
对于其中一个foo的求值为True,在循环外仍为False。有什么方法可以仅使用模板代码来执行此操作,而无需再次遍历所有foos吗?
最佳答案
我认为Jinja2不直接支持这一点。
IMO最好是完全避免它,并在模板外部尽可能多地预先计算数据。
如果您无法避免在模板中执行此操作,则可以采用多种方法来解决它,例如使用字典或某些自定义对象:
{% set foobar = {'value': False} %}
{% for foo in foos %}
[... render the foo here ...]
{% if foo.bar %}
{% if foobar.update({'value': foo.bar}) %}
{% endif %}
{% endif %}
{% endfor %}
[...]
{% if foobar['value'] %}
At least one of the foos is bar!!!
{% endif %}
关于python - 在Jinja2循环中设置标志,在循环外部进行访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30611762/