【发布时间】:2011-06-06 18:36:25
【问题描述】:
这可能很简单,但我环顾四周,找不到答案。从 Django 模板中引用列表中单个项目的最佳方法是什么?
换句话说,我如何在模板语言中执行{{ data[0] }} 的等效操作?
【问题讨论】:
标签: python django django-templates
这可能很简单,但我环顾四周,找不到答案。从 Django 模板中引用列表中单个项目的最佳方法是什么?
换句话说,我如何在模板语言中执行{{ data[0] }} 的等效操作?
【问题讨论】:
标签: python django django-templates
看起来像{{ data.0 }}。见Variables and lookups。
【讨论】:
{{ data.foo }},其中foo是一个变量,里面有一个索引值,而不是一个属性名。
更好的方法:自定义模板过滤器: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 }}
经过测试,效果很好^_^
【讨论】:
{{ data.0 }} 应该可以工作。
假设你写了data.obj django 尝试了data.obj 和data.obj()。如果它们不起作用,它会尝试data["obj"]。在您的情况下,data[0] 可以写为{{ data.0 }}。但我建议您将data[0] 拉到视图中并将其作为单独的变量发送。
【讨论】:
@jennifer06262016,您绝对可以添加另一个过滤器来返回 django 查询集中的对象。
@register.filter
def get_item(Queryset):
return Queryset.your_item_key
在这种情况下,您可以在模板中输入类似 {{ Queryset|index:x|get_item }} 的内容来访问某个字典对象。它对我有用。
【讨论】: