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 ...

M. Ryan
quelle

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 }}
Daniel Roseman
quelle
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 %}
Mark Lavin
quelle
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


quelle
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 }}
RealScatman
quelle