Django Templating: Zugriff auf Eigenschaften des ersten Elements in einer Liste


86

Ziemlich einfach. Ich habe eine Python-Liste, die ich an eine Django-Vorlage weitergebe.

Ich kann mit auf das erste Element in dieser Liste zugreifen

{{ thelist|first }}

Ich möchte jedoch auch auf eine Eigenschaft dieses Elements zugreifen ... im Idealfall würde man denken, dass es so aussehen würde:

{{ thelist|first.propertyName }}

Aber leider nicht.

Gibt es eine Vorlagenlösung dafür oder übergebe ich nur eine zusätzliche Vorlagenvariable ...

Antworten:


178

Sie können über die Indexnummer auf jedes Element in einer Liste zugreifen. In einer Vorlage funktioniert dies genauso wie bei jeder anderen Eigenschaftssuche:

{{ thelist.0.propertyName }}

Hmm. Dies funktioniert jedoch nicht mit einem inline_admin_formset. Ich denke, der Iterator funktioniert nicht so, wie ich es erwartet habe.
Shayne

Hallo Daniel, könntest du meine Frage zu template / view stackoverflow.com/questions/34791375/… überprüfen ?
Sathish

Dies ist viel besser als eine forSchleife, um jede der Fehlermeldungen durchzugehen. Vielen Dank!
IIllIIll

1
Und thelist.-1.propertyNamefür den letzten Artikel?
Asqiir

1
Nein, das würde leider nicht funktionieren, Django kann das nicht analysieren. Sie müssten das withTag zusammen mit verwenden |last, wie Mark in der anderen Antwort vorschlägt.
Daniel Roseman

33

Sie können das withVorlagen-Tag mit dem firstVorlagenfilter kombinieren , um auf die Eigenschaft zuzugreifen.

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}

1
Bei einem Wörterbuch wird zuerst ein Tupel für das Schlüssel / Wert-Paar zurückgegeben. Es ist etwas hässlich, aber ich habe ein weiteres mit Anweisung hinzugefügt, um nur die Werte zu erhalten. {% mit der Liste | zuerst als erstes Objekt%} {% mit dem ersten Objekt.1 als Objekt%} {{Objekt}} {% endwith%} {% endwith%}
Matthew Purdon

21

Wenn Sie versuchen, auf viele Felder zuzugreifen, denken Sie daran, diese hinzuzufügen all, damit sie so aussehenobject.m2m_field.all.0.item_property


1
Könnte dir +10 geben und "alle" erwähnen, du hast meinen Tag gerettet;)
cwhisperer

0

Eine möglicherweise klarere Antwort / Syntax für den Zugriff auf eine ManyToManyField-Eigenschaft in einer Objektliste, die für die Django-Vorlage bereitgestellt wird, sieht folgendermaßen aus:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.