2012-06-15 9 views
8

Angenommen, ich übergebe ein Wörterbuch an meine jinja2-Vorlage.
Nach Ansicht habe ich so etwas wieÄndern der Wörterbuchattribute in jinja2

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

In der Vorlage ich den Wert des Schlüssels von get_params ändern muß. Die logische Sache

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

nicht mit einem Fehler

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

Meine Frage ist, wie kann ich die Werte in einem Wörterbuch in jinja2 geben ändern

(Diese Frage here wurde gefragt, aber ich finden Sie die Antwort verwirrend und es beantwortet nur die Verschmelzung Teil)

Beantworten EDIT:

Jinja2 bietet die "Do" -Erweiterung. Um diese Erweiterung Pyramide hinzuzufügen, gehen Sie wie folgt in der Datei __init__.py

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

In der Vorlage

{% do get_params.update({'cri':'src'}) %} 

Antwort

4

Die Idee ist, dass Sie nicht Zuweisungen in jinja2 ausführen können. Was Sie jedoch tun können (wie in dem anderen Beitrag, den Sie verlinkt haben), ist, einen do-Block aufzurufen und eine Aktualisierungsoperation auszuführen (update ist eine Methode eines beliebigen dict in python; http://docs.python.org/library/stdtypes.html#dict.update).

+0

Ich habe den Update-Teil (eigentlich macht es jetzt in {{}} Tags, aber das druckt keine). Wie verwende ich einen {% do%} Block? Code wird sehr geschätzt. Vor allem, wie man jinja2 Erweiterungen von Pyramide – RedBaron

+1

Scratch, die ... es geschafft haben, zu tun – RedBaron