提问人:MyTux 提问时间:9/16/2010 最后编辑:davidismMyTux 更新时间:5/15/2022 访问量:506026
在jinja中设置变量
Set variable in jinja
问:
我想知道如何在 jinja 中用另一个变量设置变量。我会解释,我有一个子菜单,我想显示哪个链接处于活动状态。我试过了这个:
{% set active_link = {{recordtype}} -%}
其中 recordtype 是为我的模板给出的变量。
答:
670赞
Soviut
11/15/2010
#1
{{ }}
告诉模板打印值,这在您尝试执行的表达式中不起作用。相反,请使用模板标记,然后以与普通 python 代码相同的方式分配值。{% set %}
{% set testing = 'it worked' %}
{% set another = testing %}
{{ another }}
结果:
it worked
评论
3赞
Ib33X
11/11/2011
如果我的变量是 dict what now {% set dict.key = 'test' %} 不起作用
0赞
Pascal
7/12/2016
已删除的答案还包括此链接,该链接作为此答案的补充信息:jinja.pocoo.org/docs/tricks/#highlighting-active-menu-items
0赞
Sri Test
6/19/2020
我们可以创建一个全局 Jinja 变量并在嵌入 Jinja 变量的 HTML 文件中使用它吗?@Soviut
0赞
LunkRat
7/1/2022
为了进一步说明,通过扩展此示例: 结果:{% set another = testing + " flawlessly" %}
{{ another }}
it worked flawlessly
1赞
Jean-Francois T.
1/28/2023
@LunkRat 建议用于连接字符串,而不是(请参阅 jinja.palletsprojects.com/en/2.11.x/templates/#math~
+
)
30赞
Chad Pierce
9/10/2014
#2
就这样设置吧
{% set active_link = recordtype -%}
评论
10赞
Leonid
11/7/2016
为什么特别喜欢这样(末尾的减号而不是开头的减号)?如果我没记错的话,这将删除尾随但不删除前导空格。为了什么目的?
29赞
Graham P Heath
4/26/2018
它在原来的问题̄\_(ツ)_/ ̄中
7赞
Gevorg Hakobyan
7/1/2021
减号 - 附加到语句的开头或结尾(例如 {%- <statement> -%})告诉 Jinja 去掉它后面的新行。查看 webforefront.com/django/usebuiltinjinjastatements.html
93赞
pymen
10/21/2016
#3
多个变量赋值的好速记
{% set label_cls, field_cls = "col-md-7", "col-md-3" %}
评论
7赞
John R Perry
8/22/2019
这似乎还不能回答这个问题?
11赞
Meet Sinojia
11/23/2020
@JohnRPerry 但它是对公认的答案的一个很好的补充。
19赞
andrewdotn
5/15/2022
#4
您可以使用标签执行此操作。请参阅官方文档。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
标签上的官方文档感兴趣,而不是这里提问者所犯的具体语法错误或如何修复它,这是这里和链接的重复地址的顶级答案。