我想知道如何在jinja中用另一个变量设置一个变量。我会解释,我有一个子菜单,我想显示哪个链接是活跃的。我试了一下:
{% set active_link = {{recordtype}} -%}
其中recordtype是为模板给定的变量。
我想知道如何在jinja中用另一个变量设置一个变量。我会解释,我有一个子菜单,我想显示哪个链接是活跃的。我试了一下:
{% set active_link = {{recordtype}} -%}
其中recordtype是为模板给定的变量。
当前回答
{{}}告诉模板打印值,这在表达式中不起作用。相反,使用{% set %}模板标记,然后按照在普通python代码中相同的方式分配值。
{% set testing = 'it worked' %}
{% set another = testing %}
{{ another }}
结果:
it worked
其他回答
像这样摆好
{% 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
为目的。
多变量赋值的很好速记
{% set label_cls, field_cls = "col-md-7", "col-md-3" %}
{{}}告诉模板打印值,这在表达式中不起作用。相反,使用{% set %}模板标记,然后按照在普通python代码中相同的方式分配值。
{% set testing = 'it worked' %}
{% set another = testing %}
{{ another }}
结果:
it worked