J’aimerais utiliser une variable comme clé dans un dictionnaire dans un modèle Django. Je ne peux pas pour la vie de moi trouver comment le faire. Si j’ai un produit avec un nom ou un champ d’ID et un dictionnaire de notation avec des index des ID de produit, j’aimerais pouvoir dire:
{% for product in product_list %} {{ ratings.product.id }}
{% endfor %}
En python, cela serait accompli avec un simple
ratings[product.id]
Mais je ne peux pas le faire fonctionner dans les modèles. J’ai essayé d’utiliser avec … pas de dés. Des idées?
Vous devez préparer vos données à l’avance, dans ce cas, vous devez transmettre la liste des deux tuples à votre modèle:
{% for product, rating in product_list %} {{ product.name }}
{{ rating }}
{% endfor %}
Créez un tag comme celui-ci (dans votre projet / templatetags):
@register.filter def keyvalue(dict, key): return dict[key]
Usage:
{{dictionary|keyvalue:key_variable}}
Il y a une solution très sale :
We need d[{{ k }}] So here it is: {% for key, value in d.items %} {% if k == key %} {{ value }} {% endif %} {% endfor %}
S’appuyant sur la réponse de eviltnan, son filtre déclenchera une exception si key
n’est pas une clé de dict
.
Les filtres ne devraient jamais déclencher d’exceptions, mais devraient échouer normalement . Ceci est une réponse plus robuste / complète:
@register.filter def keyvalue(dict, key): try: return dict[key] except KeyError: return ''
Fondamentalement, cela ferait la même chose que dict.get(key, '')
dans le code Python, et pourrait aussi être écrit de cette manière si vous ne voulez pas inclure le bloc try / except, bien que cela soit plus explicite.