2012-06-15 16 views
8

Supponiamo di passare un dizionario al mio modello jinja2.
Nella vista ho qualcosa di simileModifica attributi dizionario in jinja2

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

Nel modello ho bisogno di cambiare il valore di chiavi di get_params. La cosa più logica

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

non riesce con un errore

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

La mia domanda è come faccio a modificare i valori passati a un dizionario in Jinja2

(Questa domanda è stato chiesto here, ma io trova la risposta confusa e risponde solo alla parte risultante dalla fusione)

Risposta MODIFICA:

Jinja2 fornisce l'estensione "do". Per aggiungere che l'estensione a piramide, effettuare le seguenti operazioni nel file di __init__.py

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

Nel modello

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

risposta

4

L'idea è che non è possibile eseguire le assegnazioni in Jinja2. Tuttavia, ciò che puoi fare (come suggerito nell'altro post che hai collegato) è chiamare un blocco do ed eseguire un'operazione di aggiornamento (l'aggiornamento è un metodo di qualsiasi dict in python; http://docs.python.org/library/stdtypes.html#dict.update).

+0

Ho ottenuto la parte di aggiornamento (in realtà lo faccio ora nei tag {{}} ma che stampa Nessuno). Come utilizzo un blocco {% do%}. Il codice sarà molto apprezzato. Esplicitamente come abilitare le estensioni jinja2 dalla piramide – RedBaron

+1

Scratch che ... è riuscito a farlo – RedBaron