safe - Usar la variable como clave del diccionario en la plantilla de Django
templates dirs django (4)
Basándose en la respuesta de eviltnan, su filtro generará una excepción si la key
no es una clave de dict
.
Los filtros nunca deberían generar excepciones, pero deberían fallar con elegancia . Esta es una respuesta más robusta / completa:
@register.filter
def keyvalue(dict, key):
try:
return dict[key]
except KeyError:
return ''''
Básicamente, esto haría lo mismo que dict.get(key, '''')
en el código de Python, y también podría escribirse de esa manera si no desea incluir el bloque try / except, aunque es más explícito.
Me gustaría utilizar una variable como clave en un diccionario en una plantilla de Django. No puedo, por la vida de mí, descubrir cómo hacerlo. Si tengo un producto con un nombre o campo de ID y un diccionario de calificaciones con índices de las ID de productos, me gustaría poder decir:
{% for product in product_list %}
<h1>{{ ratings.product.id }}</h1>
{% endfor %}
En Python esto se lograría con un simple
ratings[product.id]
Pero no puedo hacer que funcione en las plantillas. He intentado usarlo con ... sin dados. Ideas?
Crea una etiqueta de plantilla como esta (en tu proyecto / templatetags):
@register.filter
def keyvalue(dict, key):
return dict[key]
Uso:
{{dictionary|keyvalue:key_variable}}
Debe preparar sus datos de antemano, en este caso debe pasar una lista de dos tuplas a su plantilla:
{% for product, rating in product_list %}
<h1>{{ product.name }}</h1><p>{{ rating }}</p>
{% endfor %}
Hay una solución muy sucia :
<div>We need d[{{ k }}]</div>
<div>So here it is:
{% for key, value in d.items %}
{% if k == key %}
{{ value }}
{% endif %}
{% endfor %}
</div>