在Django模板中按索引引用列表项?


107

这可能很简单,但是我环顾四周,找不到答案。从Django模板引用列表中的单个项目的最佳方法是什么?

换句话说,{{ data[0] }}在模板语言中我该如何做?

谢谢。

Answers:



76

更好的方法:自定义模板过滤器: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
学习模板标签的应用程序的最简单的解释之一!
vanguard69

5
太好了!但是使用{{List | index:x}}格式,如何在通常使用点的地方访问值?{{(List | index:x).name}}显然不起作用。谢谢!
JTFouquier '16

正是我想要的。谢谢!
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

我正在遍历一个列表(匹配项),而我又遍历了另一个要在其中使用索引(counter0)的列表,我尝试了{{matchTeamEmblems.forloop.counter0.homeTeamID}},但它不起作用,matchTeamEmblems是一个列表我在simple_tag中生成了代码,该代码为我的标志构建了URL(static ..),但我无法访问它们
kaya

24

{{ data.0 }} 应该管用。

假设您写了data.objdjango try data.objdata.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}}的内容,以访问某些字典对象。这个对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.