Django template wie zum nachschlagen der Wörterbuch-Wert mit einer variable
mydict = {"key1":"value1", "key2":"value2"}
Den regulären Weg, um ein Wörterbuch-lookup-Wert in einem Django-template ist {{ mydict.key1 }}
, {{ mydict.key2 }}
. Was ist, wenn der Schlüssel ein-loop-variable? ie:
{% 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
ausfällt. Wie man dieses Problem beheben?
InformationsquelleAutor Stan | 2011-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie eine benutzerdefinierte Vorlage filtern:
(Ich benutze
.get
so, dass wenn der Schlüssel nicht vorhanden ist, gibt es keine. Wenn Siedictionary[key]
es wird zu erhöhen eineKeyError
dann.)Verwendung:
Warum ist das nicht standardmäßig integriert? 🙁
Ich denke, @Jeff meinte, Django Benutzerdefinierte Vorlage Filtern Dokumentation
das ticket Lesen, kann ich sagen, das ist lächerlich.
Funktioniert der filter gehen views.py einige extra filters.py oder welche Datei?
InformationsquelleAutor culebrón
Holen beide den Schlüssel und den Wert aus dem dictionary in der Schleife:
Ich finde das einfacher zu Lesen und es vermeidet die Notwendigkeit für eine spezielle Codierung. Ich in der Regel brauchen Sie den Schlüssel und den Wert innerhalb der Schleife sowieso.
Es ist eine Lösung, die (nur sehr ineffizient) da können Sie aufzählen der Elemente des dict und dann entsprechend mit dem key aus der Liste.
Beachten Sie, dass dies funktioniert nicht, wenn das Wörterbuch, das Sie zugreifen möchten, enthält ein anderes Wörterbuch im inneren.
Wenn deine Werte sind dicts, können Sie eine weitere for-Schleife für Ihre Schlüssel und Werte, aber es ist wahrscheinlich, dass die Komplexität nimmt Sie hin, dass es sich lohnt über einen benutzerdefinierten filter wie beschrieben in @culebron Antwort.
Dies ist die beste Antwort!!! Sie müssen nicht zum erstellen eines benutzerdefinierten filters!
InformationsquelleAutor Paul Whipp
Können Sie nicht standardmäßig. Der Punkt ist das Trennzeichen /trigger für Attribut-lookup /key lookup /Scheibe.
Aber du kannst einen filter, das Ihnen erlaubt, ein argument übergeben:
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
InformationsquelleAutor Yuji 'Tomita' Tomita
Ich hatte eine ähnliche situation. Allerdings habe ich eine andere Lösung.
In meinem Modell habe ich eine Eigenschaft erstellen, die Wörterbuch nachschlagen. In der Vorlage habe ich dann die Eigenschaft zu verwenden.
In meinem Modell: -
In meinem template: -
InformationsquelleAutor sexybear2
Für mich die Erstellung einer python-Datei namens
template_filters.py
in meiner App unter Inhalt den jobNutzung ist wie das, was culebrón sagte :
register = Library()
? Was tut es ?Wenn Sie möchten, dass alle Ihre Vorlagen zu kennen, über den neuen filter, dann müssen Sie es registrieren unter
django.template.base.Library
Klasse. durchregister = Library()
instanzieren wir, die Klassefilter
Funktion annotator innen zu erreichen, die wir brauchen.InformationsquelleAutor AmiNadimi
env: django 2.1.7
anzeigen:
Vorlage:
InformationsquelleAutor Yi Yang Apollo