Django Şablon Oluşturma: bir listedeki ilk öğenin özelliklerine nasıl erişilir


88

Oldukça basit. Django şablonuna aktardığım bir Python listem var.

Bu listedeki ilk öğeye özel olarak şunu kullanarak erişebilirim:

{{ thelist|first }}

Bununla birlikte, o öğenin bir özelliğine de erişmek istiyorum ... ideal olarak şöyle görüneceğini düşünürsünüz:

{{ thelist|first.propertyName }}

Ama ne yazık ki öyle değil.

Bunun herhangi bir şablon çözümü var mı, yoksa kendimi fazladan bir şablon değişkeni geçirirken mi bulacağım ...

Yanıtlar:


184

Bir listedeki herhangi bir öğeye dizin numarası aracılığıyla erişebilirsiniz. Bir şablonda bu, diğer tüm özellik aramalarıyla aynı şekilde çalışır:

{{ thelist.0.propertyName }}

Hmm. ancak bu bir inline_admin_formset ile çalışmaz. Sanırım yineleyici beklediğim gibi çalışmıyor.
Shayne

Merhaba Daniel, Template / view stackoverflow.com/questions/34791375/… ile ilgili soruma bakar mısınız?
Sathish

Bu, forhata mesajlarının her birinin üzerinden geçmek için bir döngüden çok daha iyidir . Teşekkürler!
IIllIIll

1
Ve thelist.-1.propertyNameson madde için?
Asqiir

1
Hayır, bu maalesef işe yaramaz, Django bunu ayrıştıramaz. Mark'ın diğer yanıtta önerdiği gibi , withetiketi ile birlikte kullanmanız gerekir |last.
Daniel Roseman

33

Özelliğe erişmek için withşablon etiketini firstşablon filtresiyle birleştirebilirsiniz .

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

1
Bir sözlük için, önce anahtar / değer çifti için bir demet döndürür, bu biraz çirkin ama sadece değerleri elde etmek için başka bir ifade ekledim. {% listeyle | first as first_object%} {%, birinci_object.1 nesne olarak%} {{object}} {% endwith%} {% endwith%}
Matthew Purdon

21

Çok fazla alana erişmeye çalışıyorsanız, eklemeyi unutmayın all, böyleceobject.m2m_field.all.0.item_property


1
"Hepsi" den +10 bahseder misiniz, günümü kurtardınız;)
cwhisperer

0

django şablonuna sağlanan bir nesne listesindeki bir ManyToManyField özelliğine erişmek için potansiyel olarak daha net bir cevap / sözdizimi şu şekilde görünür:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.