2012-06-15 15 views
8

Supongamos que paso un diccionario a mi plantilla jinja2.
En la vista que tienen algo así comoModificar los atributos del diccionario en jinja2

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

En la plantilla que tengo que cambiar el valor de las claves de get_params. Lo lógico

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

falla con un error

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

Mi pregunta es ¿cómo puedo modificar los valores pasados ​​a un diccionario en Jinja2

(Esta pregunta se ha hecho here, pero encuentra la respuesta confusa y solo responde a la parte de fusión)

Responder EDITAR:

Jinja2 proporciona la extensión 'do'. Para añadir que la extensión de la pirámide, haga lo siguiente en el archivo

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

__init__.py En la plantilla

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

Respuesta

4

La idea es que no se puede realizar asignaciones en Jinja2. Sin embargo, lo que puede hacer (como se sugiere en la otra publicación que ha vinculado) es llamar a un bloque do y realizar una operación de actualización (la actualización es un método de cualquier dict en python; http://docs.python.org/library/stdtypes.html#dict.update).

+0

Obtuve la parte de actualización (En realidad ahora lo hago en etiquetas {{}} pero eso imprime Ninguno). ¿Cómo uso un bloque {% do%}? El código será muy apreciado. Específicamente, cómo habilitar extensiones jinja2 desde la pirámide – RedBaron

+1

Scratch that ... logró hacerlo – RedBaron

Cuestiones relacionadas