ChatGPT解决这个技术问题 Extra ChatGPT

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

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

换句话说,我如何在模板语言中执行 {{ data[0] }} 的等效操作?


M
Mauricio Cortazar

它看起来像 {{ data.0 }}。请参阅Variables and lookups


烦人的是我不能说{{ data.foo }},其中foo 是一个变量,其中有一个索引值,而不是一个属性名。
如果您愿意创建自定义标签,则可以做更多事情。在这里,我们只是使用内置的东西。
链接失效了,试试这个:docs.djangoproject.com/en/1.10/ref/templates/api/…
B
Bakuutin

更好的方法:自定义模板过滤器:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

例如在模板中获取 my_list[x]:

在模板中

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

模板标签/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 }}

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


学习模板标签应用的最简单解释之一!
这太棒了!但是使用 {{ List|index:x }} 格式,我如何访问通常使用点的值? {{ (List|index:x).name }} 显然不起作用。谢谢!
正是我想要的。谢谢!
@SuperCode '0' 表示获取从 0 开始的索引,而不是 1
此外,正如@JTFouquier 所问,您可以使用 with 访问元素属性,如 here 所述
a
arulmr

{{ data.0 }} 应该可以工作。

假设您编写了 data.obj django 尝试 data.objdata.obj()。如果它们不起作用,它会尝试 data["obj"]。在您的情况下,data[0] 可以写成 {{ data.0 }}。但我建议您在视图中拉出 data[0] 并将其作为单独的变量发送。


K
Kendrick Fong

@jennifer06262016,您绝对可以添加另一个过滤器来返回 django 查询集中的对象。

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

在这种情况下,您可以在模板中输入类似 {{ Queryset|index:x|get_item }} 的内容来访问某个字典对象。这个对我有用。