如何在Django模板中按索引引用列表项?
这可能看起来很简单,但我找了很久也没找到答案。在Django的模板中,怎么才能引用列表中的单个项目呢?
换句话说,我想知道在模板语言中,怎么做才能达到和{{ data[0] }}
一样的效果?
5 个回答
26
{{ data.0 }}
应该可以正常使用。
假设你写了 data.obj
,Django 会先尝试 data.obj
和 data.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 }}
。可以查看 变量和查找 的相关内容。