2009-12-15 25 views
12

estoy tratando de presentar un diccionario de mi view.py en la plantilla HTML, tales como:teclas dict con espacios en plantillas de Django

test = { 'works': True, 'this fails':False } 

y en la plantilla:

Esto funciona sin problemas :

{{ test.works }} 

embargo, una clave de diccionario que está teniendo un espacio vacío entre las palabras tales como 'esto no funciona' no funciona:

{{ test.this fails }} 

consigo este error:

Could not parse the remainder: ' fails' from 'this fails'

¿Cómo puedo superar este problema? No soy el que llena los modelos, así que no puedo cambiar las claves del dict para eliminar espacios.

Respuesta

16

El filtro que desea es algo así como

@register.filter(name='getkey') 
def getkey(value, arg): 
    return value[arg] 

Y se utiliza con

{{test|getkey:'this works'}} 

por lo urce: http://www.bhphp.com/blog4.php/2009/08/17/django-templates-and-dictionaries

+0

No te olvides de {% load myfilter%} en la plantilla – Ross

+2

@Ross - ese sitio web vinculado debe venir con una señal de advertencia. Ponte tus gafas de sol! –

+0

el filtro debe permanecer en un archivo dentro de un templatetags dir. más información @ http://stackoverflow.com/questions/3474734/django-custom-template-filter-cant-work –

-4

Eso no me parece correcto. ¿Puedes hacer lo siguiente?

{{ test['works'] }} 
{{ test['this fails'] }} 

Así es como funciona el acceso de diccionario en python.

+0

No importa, lo probé y no funciona. – SapphireSun

+1

No se pudo analizar el resto: '[' works ']' from 'test [' works ']' – Hellnar

+0

Sí, accede a los valores del diccionario dados una tecla con la notación '.' en las plantillas de Django. –

2

No conozco ninguna solución estándar en Django. Creo que es posible con un filtro de plantilla.

usted puede estar interesado en este artículo http://push.cx/2007/django-template-tag-for-dictionary-access (el autor está utilizando término etiqueta de plantilla, pero en realidad se trata de un filtro de plantilla)

espero que ayude

+0

Parece que funcionaría, pero para que conste, eso no es una etiqueta de plantilla, es un filtro (parece que quien escribió ese artículo también cometió ese error). –

+0

¡tienes razón! es un filtro Gracias. He solucionado eso – luc

Cuestiones relacionadas