Django Templating: come accedere alle proprietà del primo elemento in un elenco


88

Abbastanza semplice. Ho una lista di Python che sto passando a un template Django.

Posso accedere in modo specifico al primo elemento in questo elenco utilizzando

{{ thelist|first }}

Tuttavia, voglio anche accedere a una proprietà di quell'oggetto ... idealmente potresti pensare che sarebbe simile a questo:

{{ thelist|first.propertyName }}

Ma purtroppo non è così.

Esiste una soluzione di modello a questo, o mi ritroverò a passare una variabile di modello in più ...

Risposte:


184

È possibile accedere a qualsiasi elemento in un elenco tramite il suo numero di indice. In un modello funziona come qualsiasi altra ricerca di proprietà:

{{ thelist.0.propertyName }}

Hmm. tuttavia questo non funziona con un inline_admin_formset. Immagino che l'iteratore non funzioni come mi aspetto.
Shayne

Ciao Daniel, potresti controllare la mia domanda relativa al modello / vista stackoverflow.com/questions/34791375/… ?
Sathish

Questo è molto meglio di un forciclo per passare attraverso ciascuno dei messaggi di errore. Grazie!
IIllIIll

1
E thelist.-1.propertyNameper l'ultimo articolo?
Asqiir

1
No, sfortunatamente non funzionerebbe, Django non può analizzarlo. Dovresti usare il withtag insieme a |last, come suggerisce Mark nell'altra risposta.
Daniel Roseman

33

È possibile combinare il withtag del modello con il firstfiltro del modello per accedere alla proprietà.

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

1
Per un dizionario, prima restituisce una tupla per la coppia chiave / valore, è un po 'brutto ma ne ho aggiunta un'altra con l'istruzione per ottenere solo i valori. {% with thelist | first as first_object%} {% with first_object.1 as object%} {{object}} {% endwith%} {% endwith%}
Matthew Purdon

21

Se stai tentando di accedere a un campo manytomany, ricordati di aggiungere all, in modo che sembreràobject.m2m_field.all.0.item_property


1
Potrei darti +10 menzionando "tutto", mi hai salvato la giornata;)
cwhisperer

0

una risposta / sintassi potenzialmente più chiara per accedere a una proprietà ManyToManyField in un elenco di oggetti fornito al modello django sarebbe simile a questa:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.