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

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

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 %}

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


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 }}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.