จะเข้าถึงองค์ประกอบต่างๆในเทมเพลต Django ได้อย่างไร?


167

ฉันได้รับอาร์เรย์ที่arrส่งไปยังแม่แบบ Django ของฉัน ฉันต้องการเข้าถึงแต่ละองค์ประกอบของอาเรย์ในอาเรย์ (เช่นarr[0], arr[1]) ฯลฯ แทนที่จะวนซ้ำทั้งอาเรย์

มีวิธีทำในเทมเพลต Django หรือไม่?


4
คุณสามารถเข้าถึงรายการเช่นนี้arr.0, arr.1... วิธีแก้ไขปัญหาอื่น: เขียนแท็กเทมเพลตของคุณเองarr|array_item: "0" หรืออะไรทำนองนี้
rphonika

1
@rphonika ใช่ตัวอย่างที่นี่: stackoverflow.com/a/29664945/2714931
WeizhongTu

คำตอบ:


304

จำไว้ว่าเครื่องหมายจุดในเทมเพลต Django นั้นใช้สำหรับสัญกรณ์ที่แตกต่างกันสี่แบบใน Python ในเทมเพลตfoo.barสามารถหมายถึงใด ๆ ของ:

foo[bar]       # dictionary lookup
foo.bar        # attribute lookup
foo.bar()      # method call
foo[bar]       # list-index lookup

มันจะพยายามตามลำดับนี้จนกว่าจะพบการแข่งขัน ดังนั้นfoo.3จะให้ดัชนีรายการของคุณแก่คุณเพราะวัตถุของคุณไม่ใช่ dict ที่มี 3 เป็นคีย์ไม่มีแอตทริบิวต์ชื่อ 3 และไม่มีวิธีชื่อ 3


3
ไม่ใช่คนแรกและคนสุดท้ายที่ชอบอีกfoo['bar']ใช่ไหม
Bob Stein

2
ดูเหมือนจะไม่มีทางเข้าถึงรายการโดยใช้ดัชนีตัวแปร :(
Vicky Chijwani

เห็นด้วยกับ @VickyChijwani: ตัวเลือกที่สี่ด้านบนไม่ถูกต้อง แม่แบบ Django ดูเหมือนจะไม่ทำการค้นหา list-index พร้อมตัวแปร
ehacinom

@hiyume ทำอย่างไรจึงจะเอาชนะได้
Csaba Toth

ฉันไม่เข้าใจว่าไม่พบเอกสารดังกล่าวในเอกสารทางการ คุณสามารถให้แหล่งข้อมูลสำหรับโพสต์นั้นได้หรือไม่ ฉันยังประหลาดใจกับคำตอบที่ไม่เป็นที่ยอมรับในปัจจุบัน
Kaszanas

149
arr.0
arr.1

เป็นต้น


11
วิธีการพิมพ์แบบไดนามิกเช่นอดีต: arr.variablename
Nandha Kumar

มีวิธีการทำเช่นนี้โดยไม่ต้องใช้หมายเลขวิเศษหรือไม่ อีกนัยหนึ่งคือ "ชื่อ" .0 .1 .2 .2 ฯลฯ ... ? เช่น array ["ชื่อ"], array ["นามสกุล"] ฯลฯ ..
cyberjoac

@cyberjoac ในกรณีนั้นใช้ dict ในมุมมอง: d = {'first_name': 'foo', 'last_name': 'bar'} ในเทมเพลต {{d.first_name}} จะใช้งานได้ดี
Ofri Raviv


7

เมื่อคุณrenderขอcoctextข้อมูลบางอย่าง: สำหรับ exampel:

return render(request, 'path to template',{'username' :username , 'email'.email})

คุณสามารถเห็นด้วยกับแม่แบบเช่นนี้: for variabels :

{% if username %}{{ username }}{% endif %}

for array :

{% if username %}{{ username.1 }}{% endif %}
{% if username %}{{ username.2 }}{% endif %}

คุณยังสามารถตั้งชื่อวัตถุอาเรย์ในviews.pyสิบและใช้มันเช่น:

{% if username %}{{ username.first }}{% endif %}

หากมีปัญหาอื่น ๆ ฉันต้องการที่จะช่วยคุณ

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