在 Django 模板中按索引引用列表项?
- 2025-03-10 08:52:00
- admin 原创
- 48
问题描述:
这可能很简单,但我四处寻找却找不到答案。从 Django 模板中引用列表中的单个项目的最佳方法是什么?
换句话说,我如何{{ data[0] }}
在模板语言中做到等效的事情?
解决方案 1:
看起来像{{ data.0 }}
。请参阅变量和查找。
解决方案 2:
更好的方法:自定义模板过滤器: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 }}
经过测试,效果很好^_^
解决方案 3:
{{ data.0 }}
应该可以。
假设你写了data.obj
django triesdata.obj
和data.obj()
。如果它们不起作用,它会 tries data["obj"]
。在你的情况下data[0]
可以写成{{ data.0 }}
。但我建议你拉data[0]
入视图并将其作为单独的变量发送。
解决方案 4:
@jennifer06262016,您绝对可以添加另一个过滤器来返回 django Queryset 内的对象。
@register.filter
def get_item(Queryset):
return Queryset.your_item_key
在这种情况下,您可以在模板中输入类似 {{ Queryset|index:x|get_item }} 的内容来访问某个字典对象。对我来说,这种方法很管用。
解决方案 5:
首先确保应用程序包含自定义标签功能已添加到已安装的应用程序中,请按照以下说明进行操作
1在主目录 app 中创建另一个名为templatetags的目录,与 model.py、views.py、urls.py 同级。
2在 templatetags 目录中创建init .py 和另一个以您的自定义标签名称命名的文件,例如:my_tags.py。
MainApp/
__init__.py
models.py
templatetags/
__init__.py
my_tags.py
views.py
在您的模板中,您将使用以下内容:
{% load my_tags.py %}
在my_tags.py中:
from django import template
register = template.Library()
@register.filter(name="get")
def get(indexable, i):
return indexable[i]
在views.py中:
number = [0,1,2,3,4,5]
return render(
"index.html", {"number":number}
)
在index.html中:
{% load my_tags %}
{{numer|get:forloop.counter0}}
参考如何创建自定义模板标签和过滤器
我希望你能理解,因为英语不是我的母语
扫码咨询,免费领取项目管理大礼包!