Django modèle de la façon de rechercher un dictionnaire valeur à une variable
mydict = {"key1":"value1", "key2":"value2"}
De la façon habituelle à la recherche d'un dictionnaire de la valeur dans un Django modèle est {{ mydict.key1 }}
, {{ mydict.key2 }}
. Si la clé est une variable de boucle? c'est à dire:
{% for item in list %} # where item has an attribute NAME
{{ mydict.item.NAME }} # I want to look up mydict[item.NAME]
{% endfor %}
mydict.item.NAME
échoue. Comment résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Écrire un modèle personnalisé de filtre:
(J'utilise
.get
de sorte que si la clé est absente, elle renvoie none. Si vous nedictionary[key]
il va soulever uneKeyError
ensuite.)utilisation:
Récupérer la clé et la valeur du dictionnaire dans la boucle:
Je trouve cela plus facile à lire et il évite la nécessité pour le codage spécial. Habituellement, j'ai besoin de la clé et de la valeur à l'intérieur de la boucle, de toute façon.
Vous ne pouvez pas par défaut. Le point est le séparateur /déclencheur pour l'attribut de recherche /clé de recherche /tranche.
Mais vous pouvez faire un filtre qui vous permet de passer en argument:
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
J'ai eu une situation similaire. Cependant, j'ai utilisé une autre solution.
Dans mon modèle j'ai créer une propriété qui ne la recherche dans le dictionnaire. Dans le modèle que je puis utiliser la propriété.
Dans mon modèle: -
Dans mon template: -
Pour moi la création d'un fichier python nommé
template_filters.py
dans mon Application avec le contenu ci-dessous fait le travailutilisation est comme ce culebrón dit :
register = Library()
? Que faut-il faire ?django.template.base.Library
classe. parregister = Library()
nous instancions la classe et l'utilisationfilter
fonction de l'annotateur de l'intérieur pour arriver à notre besoin.env: django 2.1.7
vue:
modèle: