รายการอ้างอิงตามดัชนีภายในเทมเพลต Django?


116

นี่อาจจะง่าย แต่ฉันมองไปรอบ ๆ แล้วก็ไม่พบคำตอบ วิธีใดดีที่สุดในการอ้างอิงรายการเดียวในรายการจากเทมเพลต Django

กล่าวอีกนัยหนึ่งฉันจะเทียบเท่า{{ data[0] }}ภายในภาษาแม่แบบได้อย่างไร

ขอบคุณ.

คำตอบ:


195

ดูเหมือนว่า{{ data.0 }}. ดูตัวแปรและการค้นหา


49
สิ่งที่น่ารำคาญคือว่าผมไม่สามารถพูดได้{{ data.foo }}ซึ่งfooเป็นตัวแปรที่มีค่าดัชนีอยู่ในนั้นและไม่ได้ชื่อคุณสมบัติเป็น
Mike DeSimone

1
หากคุณต้องการสร้างแท็กที่กำหนดเองคุณสามารถทำสิ่งต่างๆได้มากขึ้น ที่นี่เรากำลังทำงานกับสิ่งที่มีอยู่ภายใน
Mike DeSimone

ลิงก์ไม่ทำงานอีกต่อไปลองใช้อันนี้: docs.djangoproject.com/th/1.10/ref/templates/api/…
Speccy

82

วิธีที่ดีกว่า: ตัวกรองเทมเพลตที่กำหนดเอง: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

เช่นรับ my_list [x] ในเทมเพลต:

ในเทมเพลต

{% load index %}
{{ my_list|index:x }}

templatetags / index.py

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

ถ้าmy_list = [['a','b','c'], ['d','e','f']]คุณสามารถใช้{{ my_list|index:x|index:y }}ในเทมเพลตเพื่อรับmy_list[x][y]

ใช้งานได้ดีกับ "for"

{{ my_list|index:forloop.counter0 }}

ทดสอบแล้วใช้งานได้ดี ^ _ ^


1
หนึ่งในคำอธิบายที่ง่ายที่สุดในการเรียนรู้แอปพลิเคชัน Template Tags!
vanguard69

5
มันเยี่ยมมาก! แต่ด้วยรูปแบบ {{List | index: x}} ฉันจะเข้าถึงค่าที่ปกติจะใช้จุดได้อย่างไร เห็นได้ชัดว่า {{(List | index: x) .name}} ไม่ทำงาน ขอบคุณ!
JTFouquier

สิ่งที่ฉันกำลังมองหา ขอบคุณ!
Grant Bartel

ฉันมีอาร์เรย์ที่ฉันไม่แน่ใจในดัชนีของค่าที่ฉันต้องการ{% for id in article_details.heading.contents.article_ids %} {% if id.type == 'DOI' %} {{ article_details.heading.contents.article_ids.forloop.counter0.value }} {% endif %} {% endfor %}
Akin Hwan

1
@SuperCode '0' หมายถึงการรับดัชนีซึ่งเริ่มจาก 0 ไม่ใช่ 1
WeizhongTu

24

{{ data.0 }} ควรทำงาน.

สมมติว่าคุณเขียนdata.objพยายาม Django และdata.obj หากพวกเขาไม่ทำงานมันพยายามdata.obj() data["obj"]ในกรณีของคุณdata[0]สามารถเขียนเป็น{{ data.0 }}ไฟล์. แต่ฉันแนะนำให้คุณดึงdata[0]มุมมองและส่งเป็นตัวแปรแยกต่างหาก


1

@ jennifer06262016 คุณสามารถเพิ่มตัวกรองอื่นเพื่อส่งคืนวัตถุภายใน django Queryset ได้อย่างแน่นอน

@register.filter 
def get_item(Queryset):
    return Queryset.your_item_key

ในกรณีนี้คุณต้องพิมพ์ {{Queryset | index: x | get_item}} ลงในเทมเพลตของคุณเพื่อเข้าถึงวัตถุพจนานุกรม มันใช้ได้กับฉัน

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