Mục danh sách tham chiếu theo chỉ mục trong mẫu Django?


107

Điều này có thể đơn giản, nhưng tôi đã nhìn xung quanh và không thể tìm thấy câu trả lời. Cách tốt nhất để tham chiếu một mục trong danh sách từ mẫu Django là gì?

Nói cách khác, làm cách nào để làm tương tự với {{ data[0] }}ngôn ngữ mẫu?

Cảm ơn.

Câu trả lời:


184

Nó trông giống như {{ data.0 }}. Xem Biến và tra cứu .


47
Điều khó chịu là tôi không thể nói {{ data.foo }}, đâu foolà một biến có giá trị chỉ mục trong đó chứ không phải tên thuộc tính.
Mike DeSimone

1
Nếu bạn sẵn sàng tạo một thẻ tùy chỉnh, bạn có thể làm được nhiều việc hơn thế. Ở đây chúng tôi chỉ làm việc với những thứ được tích hợp sẵn.
Mike DeSimone

Liên kết không hoạt động nữa, hãy thử liên kết này: docs.djangoproject.com/en/1.10/ref/templates/api/…
Speccy

76

Một cách tốt hơn: bộ lọc mẫu tùy chỉnh: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

chẳng hạn như lấy my_list [x] trong các mẫu:

trong mẫu

{% 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]

nếu my_list = [['a','b','c'], ['d','e','f']], bạn có thể sử dụng {{ my_list|index:x|index:y }}trong mẫu để lấymy_list[x][y]

Nó hoạt động tốt với "for"

{{ my_list|index:forloop.counter0 }}

Đã kiểm tra và hoạt động tốt ^ _ ^


1
Một trong những cách giải thích đơn giản nhất để tìm hiểu ứng dụng của Thẻ mẫu!
tiên phong69

5
Điều này thật tuyệt! Nhưng với định dạng {{List | index: x}}, làm cách nào để truy cập các giá trị mà tôi thường sử dụng dấu chấm? {{(List | index: x) .name}} rõ ràng là không hoạt động. Cảm ơn bạn!
JTFouquier

Chính xác những gì tôi đang tìm kiếm. Cảm ơn bạn!
Grant Bartel,

Tôi có một mảng mà tôi không chắc về chỉ mục của giá trị mong muốn của mình{% 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

Tôi đang lặp lại dưới đáy một danh sách (đối sánh), trong khi lặp lại tôi có một danh sách khác mà tôi muốn sử dụng chỉ mục (counter0), tôi đã thử {{matchTeamEmblems.forloop.counter0.homeTeamID}} nhưng nó không hoạt động, matchTeamEmblems là một danh sách tôi tạo trong simple_tag tạo URL (tĩnh ..) cho các biểu tượng của mình nhưng tôi không thể truy cập chúng
kaya

24

{{ data.0 }} nên làm việc.

Giả sử bạn đã viết data.objdjango cố gắng data.objdata.obj(). Nếu chúng không hoạt động, nó sẽ cố gắng data["obj"]. Trong trường hợp của bạn data[0]có thể được viết là {{ data.0 }}. Nhưng tôi khuyên bạn nên kéo data[0]chế độ xem và gửi nó dưới dạng biến riêng biệt.


1

@ jennifer06262016, bạn chắc chắn có thể thêm một bộ lọc khác để trả về các đối tượng bên trong Bộ truy vấn django.

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

Trong trường hợp đó, bạn sẽ nhập một cái gì đó như sau {{Queryset | index: x | get_item}} vào mẫu của bạn để truy cập một số đối tượng từ điển. Nó làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.