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

154 投票
5 回答
161731 浏览
提问于 2025-04-16 09:44

这可能看起来很简单,但我找了很久也没找到答案。在Django的模板中,怎么才能引用列表中的单个项目呢?

换句话说,我想知道在模板语言中,怎么做才能达到和{{ data[0] }}一样的效果?

5 个回答

26

{{ data.0 }} 应该可以正常使用。

假设你写了 data.obj,Django 会先尝试 data.objdata.obj()。如果这两个都不行,它会再尝试 data["obj"]。在你的例子中,data[0] 可以写成 {{ data.0 }}。不过我建议你在视图里先提取 data[0],然后作为一个单独的变量发送出去。

122

更好的方法是:自定义模板过滤器: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 }}

经过测试,效果很好 ^_^

265

看起来像是 {{ data.0 }}。可以查看 变量和查找 的相关内容。

撰写回答