Django Templating: วิธีเข้าถึงคุณสมบัติของรายการแรกในรายการ


88

ค่อนข้างเรียบง่าย ฉันมีรายการ Python ที่ฉันส่งผ่านไปยังเทมเพลต Django

ฉันสามารถเข้าถึงรายการแรกในรายการนี้โดยใช้ไฟล์

{{ thelist|first }}

อย่างไรก็ตามฉันต้องการเข้าถึงคุณสมบัติของรายการนั้นด้วย ... คุณคิดว่ามันจะมีลักษณะดังนี้:

{{ thelist|first.propertyName }}

แต่อนิจจามันไม่

มีวิธีแก้ไขเทมเพลตสำหรับสิ่งนี้หรือไม่หรือฉันจะพบว่าตัวเองกำลังส่งตัวแปรเทมเพลตเพิ่มเติม ...

คำตอบ:


184

คุณสามารถเข้าถึงรายการใดก็ได้ในรายการโดยใช้หมายเลขดัชนี ในเทมเพลตจะใช้งานได้เหมือนกับการค้นหาคุณสมบัติอื่น ๆ :

{{ thelist.0.propertyName }}

อืม. สิ่งนี้ใช้ไม่ได้กับ inline_admin_formset อย่างไรก็ตาม ฉันเดาว่าตัววนซ้ำไม่ทำงานตามที่ฉันคาดหวังไว้
Shayne

สวัสดี Daniel คุณช่วยตรวจสอบคำถามของฉันเกี่ยวกับ template / view stackoverflow.com/questions/34791375/…ได้ไหม
Sathish

สิ่งนี้ดีกว่าการforวนซ้ำเพื่อผ่านแต่ละข้อความแสดงข้อผิดพลาด ขอบคุณ!
IIllIIll

1
และthelist.-1.propertyNameสำหรับรายการสุดท้าย?
Asqiir

1
ไม่น่าเสียดายที่ Django ไม่สามารถแยกวิเคราะห์ได้ คุณจะต้องใช้withแท็กร่วมด้วย|lastตามที่ Mark แนะนำในคำตอบอื่น ๆ
Daniel Roseman

33

คุณสามารถรวมwithแท็กเทมเพลตกับfirstตัวกรองเทมเพลตเพื่อเข้าถึงคุณสมบัติ

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

1
สำหรับพจนานุกรมอันดับแรกจะส่งคืนทูเพิลสำหรับคู่คีย์ / ค่ามันค่อนข้างน่าเกลียด แต่ฉันเพิ่มอีกอันด้วยคำสั่งเพื่อให้ได้ค่า {% with thelist | first as first_object%} {% with first_object.1 as object%} {{object}} {% endwith%} {% endwith%}
Matthew Purdon

21

หากคุณกำลังพยายามเข้าถึงหลายช่องหลายรายการอย่าลืมเพิ่มเข้าไปallด้วยจึงจะมีลักษณะดังนี้object.m2m_field.all.0.item_property


1
ช่วยให้คุณได้ +10 ที่กล่าวถึง "ทั้งหมด" คุณช่วยวันของฉันไว้;)
cwhisperer

0

คำตอบ / ไวยากรณ์ที่อาจชัดเจนกว่าสำหรับการเข้าถึงคุณสมบัติ ManyToManyField ในรายการวัตถุที่ให้ไว้กับเทมเพลต django จะมีลักษณะดังนี้:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.