我想在循环中更改在循环外声明的变量的值.但总是在改变,它将初始值保持在循环之外.
{% set foo = False %}
{% for item in items %}
{% set foo = True %}
{% if foo %} Ok(1)! {% endif %}
{% endfor %}
{% if foo %} Ok(2)! {% endif %}
Run Code Online (Sandbox Code Playgroud)
这呈现:
Ok(1)!
Run Code Online (Sandbox Code Playgroud)
所以到目前为止唯一(坏)解决方案是:
{% set foo = [] %}
{% for item in items %}
{% if foo.append(True) %} {% endif %}
{% if foo %} Ok(1)! {% endif %}
{% endfor %}
{% if foo %} Ok(2)! {% endif %}
Run Code Online (Sandbox Code Playgroud)
这呈现:
Ok(1)!
Ok(2)!
Run Code Online (Sandbox Code Playgroud)
但是,它非常难看!还有其他更优雅的解决方案吗?
Pas*_*hka 60
尝试也基于字典的方法.它似乎不那么难看.
{% set vars = {'foo': False} %}
{% for item in items %}
{% if vars.update({'foo': True}) %} {% endif %}
{% if vars.foo %} Ok(1)! {% endif %}
{% endfor %}
{% if vars.foo %} Ok(2)! {% endif %}
Run Code Online (Sandbox Code Playgroud)
这也呈现:
Ok(1)!
Ok(2)!
Run Code Online (Sandbox Code Playgroud)
Ome*_*mer 29
如文档中所述:
请注意,循环中的赋值将在迭代结束时清除,并且不能超过循环范围.
但从版本2.10开始,您可以使用名称空间:
{% set ns = namespace(foo=false) %}
{% for item in items %}
{% set ns.foo = True %}
{% if ns.foo %} Ok(1)! {% endif %}
{% endfor %}
{% if ns.foo %} Ok(2)! {% endif %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44566 次 |
| 最近记录: |