在Jinja2循环中设置标志,访问循环外部

时间:2015-06-03 05:46:55

标签: python jinja2

我想在Jinja2模板中设置一个标志for循环,然后根据标志显示或不显示:

{% 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集不同。即使其中一个foos的foobar评估为True,class Factorial { public static void main(String args[]) { int num=Integer.parseInt(args[0]); int result=1; while(num>0) { result=result*num; num--; } System.out.println("Factorial of Given Number is :" +result); } } 在循环外仍然为False。

有没有办法只使用模板代码并且不再遍历所有foos?

1 个答案:

答案 0 :(得分:3)

我不认为这是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 %}