Django Templating: jak uzyskać dostęp do właściwości pierwszego elementu na liście

88

Dość proste. Mam listę Pythona, którą przekazuję do szablonu Django.

Mogę uzyskać dostęp do pierwszej pozycji na tej liście za pomocą

{{ thelist|first }}

Jednak chcę również uzyskać dostęp do właściwości tego elementu ... idealnie byś pomyślał, że będzie to wyglądać tak:

{{ thelist|first.propertyName }}

Ale niestety tak nie jest.

Czy jest jakieś rozwiązanie szablonowe, czy po prostu przekażę dodatkową zmienną szablonu ...

M. Ryan
źródło

Odpowiedzi:

182

Możesz uzyskać dostęp do dowolnej pozycji na liście poprzez jej numer indeksu. W szablonie działa to tak samo, jak każde inne wyszukiwanie właściwości:

{{ thelist.0.propertyName }}
Daniel Roseman
źródło
Hmm. to nie działa jednak z inline_admin_formset. Myślę, że iterator nie działa tak, jak tego oczekuję.
Shayne
Cześć Daniel, czy mógłbyś sprawdzić moje pytanie dotyczące szablonu / widoku stackoverflow.com/questions/34791375/… ?
Sathish
Jest to znacznie lepsze niż forprzejście przez pętlę przez każdy z komunikatów o błędach. Dzięki!
IIllIIll
1
A co thelist.-1.propertyNamedo ostatniej pozycji?
Asqiir
1
Nie, to niestety nie zadziała, Django nie może tego przeanalizować. Będziesz musiał użyć withtagu wraz z |last, jak sugeruje Mark w innej odpowiedzi.
Daniel Roseman,
33

Możesz połączyć withtag szablonu z firstfiltrem szablonu, aby uzyskać dostęp do właściwości.

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}
Mark Lavin
źródło
1
W przypadku słownika najpierw zwraca krotkę dla pary klucz / wartość, jest trochę brzydka, ale dodałem kolejną z instrukcją, aby uzyskać tylko wartości. {% with thelist | first as first_object%} {% with first_object.1 as object%} {{object}} {% endwith%} {% endwith%}
Matthew Purdon
21

Jeśli próbujesz uzyskać dostęp do pola manytomany, pamiętaj o dodaniu all, aby wyglądało jakobject.m2m_field.all.0.item_property


źródło
1
Mogłabyś dać +10 ze wzmianką "wszystko", uratowałeś mi dzień;)
cwhisperer
0

Potencjalnie jaśniejsza odpowiedź / składnia dostępu do właściwości ManyToManyField w liście obiektów dostarczonej do szablonu django wyglądałaby następująco:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
RealScatman
źródło