This question already has answers here:
Jinja2: Change the value of a variable inside a loop
                                
                                    (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/

10-08 22:32
查看更多