我想知道如何在 Jinja 中设置一个变量与另一个变量。
我有一个子菜单,我想显示哪个链接处于活动状态。
我试过这个:
{% set active_link = {{recordtype}} -%}
其中
recordtype
是我的模板中可用的变量。
{{ }}
告诉模板 print 值,这在您尝试执行的表达式中不起作用。 相反,请使用 {% set %}
模板标签,然后以与普通 Python 代码相同的方式分配值。
{% set testing = 'it worked' %}
{% set another = testing %}
{{ another }}
结果:
it worked
多变量赋值的好速记
{% set label_cls, field_cls = "col-md-7", "col-md-3" %}
{% set active_link = recordtype -%}
set
标签来完成此操作。请参阅官方文档。 例如,
{% set foo = "bar" %}
{{ foo }}
输出
bar
注意:存在范围问题,这意味着变量值在循环迭代之间不会持续存在,例如,如果您希望某些输出以先前和当前循环值之间的比较为条件:
{# **DOES NOT WORK AS INTENDED** #}
{% set prev = 0 %}
{% for x in [1, 2, 3, 5] %}
{%- if prev != x - 1 %}⋮ (prev was {{ prev }})
{% endif -%}
{{ x }}
{%- set prev = x %}
{% endfor %}
打印
1
⋮ (prev was 0)
2
⋮ (prev was 0)
3
⋮ (prev was 0)
5
因为变量没有被持久化。相反,您可以使用可变的命名空间包装器:
{% set ns = namespace(prev=0) %}
{% for x in [1, 2, 3, 5] %}
{%- if ns.prev != x - 1 %}⋮ (ns.prev was {{ ns.prev }})
{% endif -%}
{{ x }}
{%- set ns.prev = x %}
{% endfor %}
打印
1
2
3
⋮ (ns.prev was 3)
5
如预期。