修改jinja2中的字典属性

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

假设我将字典传递给我的 jinja2 模板。
在我看来,有类似的东西

d = {}
#set other template stuff into d
get_params['cri'] = 'time'
get_params['order'] = 'asc'
d['get_params'] = get_params
return d

在模板中我需要更改 get_params 的键值。符合逻辑的事情

{% set get_params.cri='src' %}

因错误而失败

TemplateSyntaxError: expected token '=', got '.'

我的问题是如何修改传递给 jinja2 中字典的值

(这个问题已被问到here,但我发现答案令人困惑,它只回答了合并部分)

答案编辑:

Jinja2 提供了“do”扩展。要将该扩展添加到金字塔,请在

__init__.py
文件中执行以下操作

#This line is alreadythere
config.include('pyramid_jinja2')
#Add this line
config.add_jinja2_extension('jinja2.ext.do')

在模板中

{% do get_params.update({'cri':'src'}) %}
python dictionary pyramid jinja2
2个回答
5
投票

这个想法是你不能在 jinja2 中执行作业。但是,您可以做的(如您链接的另一篇文章中所建议的)是调用 do 块并执行更新操作(更新是 python 中任何字典的方法;http://docs.python.org/library /stdtypes.html#dict.update).


0
投票

您可以在更新字典时在 Jinja2 中设置虚拟变量:

{% set dummy = get_params.update({'cri':'src'}) %}

这不会将

dummy
设置为更新后的字典,因此之后不要处理
dummy
,但
get_params
无论如何都会更新,这就是您正在寻找的。

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