在 jinja2 中修改字典属性

Posted

技术标签:

【中文标题】在 jinja2 中修改字典属性【英文标题】:Modifying dictionary attributes in jinja2 【发布时间】:2012-06-18 08:37:06 【问题描述】:

假设我将字典传递给我的 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') %

【问题讨论】:

【参考方案1】:

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

【讨论】:

我得到了更新部分(实际上现在在 标记中执行此操作,但打印无)。如何使用 % do % 块。代码将不胜感激。特别是如何从金字塔启用 jinja2 扩展

以上是关于在 jinja2 中修改字典属性的主要内容,如果未能解决你的问题,请参考以下文章

python 如何使用Markdown作为Jinja2模板中的过滤器,然后直接从模板中提取Markdown Meta属性。假设你

在 SaveChanges() 中返回字典

如何使用 jinja2 检查字典中的列表元素?

如何在 Jinja2 的变量中嵌入变量?

jinja2.exceptions.UndefinedError:'str object'没有属性'username'

在 Jinja2 If/elif 语句中加入字典元素