我想在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?
答案 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 %}