MyT*_*Tux 219 python variables templates variable-assignment jinja2
我想知道如何在jinja中使用另一个变量设置变量.我会解释,我有一个子菜单,我想显示哪个链接是活动的.我试过这个:
{% set active_link = {{recordtype}} -%}
Run Code Online (Sandbox Code Playgroud)
其中recordtype是为我的模板指定的变量.
Sov*_*iut 460
{{ }}
告诉模板打印值,这不会像你想要的那样在表达式中起作用.相反,使用{% set %}
模板标记,然后以与普通python代码相同的方式分配值.
{% set testing = 'it worked' %}
{% set another = testing %}
{{ another }}
Run Code Online (Sandbox Code Playgroud)
结果:
it worked
Run Code Online (Sandbox Code Playgroud)
pym*_*men 38
多变量赋值的简便简写
{% set label_cls, field_cls = "col-md-7", "col-md-3" %}
Run Code Online (Sandbox Code Playgroud)
and*_*otn 20
您可以使用set
标签来做到这一点。请参阅官方文档。
例如,
\n{% set foo = "bar" %}\n{{ foo }}\n
Run Code Online (Sandbox Code Playgroud)\n输出
\nbar\n
Run Code Online (Sandbox Code Playgroud)\n笔记:存在范围问题,这意味着变量值 don\xe2\x80\x99t 在循环迭代之间持续存在,例如,如果您希望某些输出以先前和当前循环值之间的比较为条件:
\n{# **DOES NOT WORK AS INTENDED** #}\n\n{% set prev = 0 %}\n{% for x in [1, 2, 3, 5] %}\n{%- if prev != x - 1 %}\xe2\x8b\xae (prev was {{ prev }})\n{% endif -%}\n{{ x }}\n{%- set prev = x %}\n{% endfor %}\n
Run Code Online (Sandbox Code Playgroud)\n印刷
\n1\n\xe2\x8b\xae (prev was 0)\n2\n\xe2\x8b\xae (prev was 0)\n3\n\xe2\x8b\xae (prev was 0)\n5\n
Run Code Online (Sandbox Code Playgroud)\n因为变量是\xe2\x80\x99t 持续存在的。相反,您可以使用可变的命名空间包装器:
\n{% set ns = namespace(prev=0) %}\n{% for x in [1, 2, 3, 5] %}\n{%- if ns.prev != x - 1 %}\xe2\x8b\xae (ns.prev was {{ ns.prev }})\n{% endif -%}\n{{ x }}\n{%- set ns.prev = x %}\n{% endfor %}\n
Run Code Online (Sandbox Code Playgroud)\n打印
\n1\n2\n3\n\xe2\x8b\xae (ns.prev was 3)\n5\n
Run Code Online (Sandbox Code Playgroud)\n如预期。
\n小智 13
就像这样设置它
{% set active_link = recordtype -%}
Run Code Online (Sandbox Code Playgroud)