从 Jinja 中的另一个变量设置变量

问题描述 投票:0回答:4

我想知道如何在 Jinja 中设置一个变量与另一个变量。
我有一个子菜单,我想显示哪个链接处于活动状态。
我试过这个:

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

其中

recordtype
是我的模板中可用的变量。

python templates variables variable-assignment jinja2
4个回答
698
投票

{{ }}
告诉模板 print 值,这在您尝试执行的表达式中不起作用。 相反,请使用
{% set %}
模板标签,然后以与普通 Python 代码相同的方式分配值。

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

结果:

it worked

96
投票

多变量赋值的好速记

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

31
投票
就这样设置吧

{% set active_link = recordtype -%}
    

26
投票
您可以使用

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
如预期。

© www.soinside.com 2019 - 2024. All rights reserved.