在jinja中设置变量

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)

  • 这听起来像是在尝试在模板中做太多工作.但我认为你可以使用方括号访问dict. (23认同)
  • 如果我的变量是 dict 现在 {% set dict.key = 'test' %} 不起作用 (2认同)

pym*_*men 38

多变量赋值的简便简写

{% set label_cls, field_cls = "col-md-7", "col-md-3" %}
Run Code Online (Sandbox Code Playgroud)

  • @JohnRPerry 但这是对已接受答案的一个很好的补充。 (4认同)
  • 这似乎似乎无法回答这个问题? (2认同)

and*_*otn 20

您可以使用set标签来做到这一点。请参阅官方文档

\n

例如,

\n
{% set foo = "bar" %}\n{{ foo }}\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
bar\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

印刷

\n
1\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

打印

\n
1\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)

  • 减号 - 附加到语句的开头或结尾(例如 {%- <statement> -%})告诉 Jinja 去除其后面的新行。请参阅 https://www.webforefront.com/django/usebuiltinjinjastatements.html (7认同)
  • 它在原始问题中¯\\ _(ツ)_ /¯ (6认同)
  • 为什么特别喜欢(最后的减号而不是开头的减号)?如果我没有弄错的话,这将删除尾随但不是前导空格.到底是什么? (4认同)