我想知道如何在 jinja 中使用另一个变量设置一个变量。我会解释一下,我有一个子菜单,我想显示哪个链接是活动的。我试过这个:
{% set active_link = {{recordtype}} -%}
其中记录类型是为我的模板提供的变量。
set
tag 感兴趣,而不是提问者在此处犯的特定语法错误或如何修复它,这是此处和链接的重复地址的最佳答案。
{{ }}
告诉模板 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
标记执行此操作。请参阅 official documentation。
例如,
{% 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
如预期。
{% set another = testing + " flawlessly" %}
{{ another }}
结果:it worked flawlessly