2012-06-15 75 views
8

假設我將字典傳遞給了我的jinja2模板。
在視圖中我有一些像在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'}) %} 

回答

4

的想法是,你不能在Jinja2的執行任務。然而,你可以做什麼(如你鏈接的另一篇文章中所建議的)是調用do塊並執行更新操作(update是python中的任何字典的一種方法; http://docs.python.org/library/stdtypes.html#dict.update)。

+0

我得到了更新部分(實際上現在在{{}}標籤中執行此操作,但打印爲無)。如何使用{%do%}塊。代碼將非常感謝。 Espicially如何啓用金字塔jinja2擴展 – RedBaron

+1

Scratch that ...設法做到這一點 – RedBaron