在jinja中设置变量

我想知道如何在jinja中用另一个变量设置一个变量。我会解释,我有一个子菜单,我想显示哪个链接是活跃的。我试了一下:

{% set active_link = {{recordtype}} -%}

其中recordtype是为模板给定的变量。

427445 次浏览

\{\{ }}告诉模板打印值,这不会像你试图做的那样在表达式中工作。相反,应该使用{% set %}模板标记,然后按照在普通python代码中相同的方式分配值。

{% set testing = 'it worked' %}
{% set another = testing %}
\{\{ another }}

结果:

it worked

像这样摆好

{% set active_link = recordtype -%}

多变量赋值很好的缩写

{% set label_cls, field_cls = "col-md-7", "col-md-3" %}

你可以用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

为目的。