Mi código de la vista se ve básicamente como esto:¿Accediendo a un dict por variable en las plantillas de Django?
context = Context()
context['my_dict'] = {'a': 4, 'b': 8, 'c': 15, 'd': 16, 'e': 23, 'f': 42 }
context['my_list'] = ['d', 'f', 'e', 'b', 'c', 'a']
Y lo que me gustaría hacer en mi plantilla de Django es la siguiente:
<ul>
{% for item in my_list %}
<li>{{ item }} : {{ my_dict.item }}</li>
{% endfor %}
</ul>
Y me gustaría esto a la salida:
<ul>
<li> d : 16 </li>
<li> f : 42 </li>
<li> e : 23 </li>
<li> b : 8 </li>
<li> c : 15 </li>
<li> a : 4 </li>
</ul>
Pero la referencia al dict por nombre de variable a través de {{ my_dict.item }}
en realidad no funciona. Sospecho que internamente está haciendo my_dict['item']
en lugar de my_dict[item]
. ¿Hay alguna forma de evitar esto?
Por supuesto, siempre podía añadir más código en la vista que decir: contexto [ 'my_derefernced'] = [(v, el contexto [my_dict] [v]) para v en context ['my_list']], pero prefiero no tener que hacer eso. Los dicts pueden ser bastante grandes. – slacy
Mire esta gran solución: http://stackoverflow.com/questions/35948/django-templates-and-variable-attributes – fiatjaf
Si los dicts son grandes, ¿por qué no usar generadores? Tal vez algo como esto: 'context ['my_dereferenced'] = ((v, context [my_dict] [v]) para v en el contexto ['mi_lista'])' – user193130