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

rggaifut  于 2023-03-13  发布在  Go
关注(0)|答案(5)|浏览(125)

这可能很简单,但我四处寻找却找不到答案。从Django模板中引用列表中的单个项目的最佳方式是什么?
换句话说,如何在模板语言中执行与{{ data[0] }}等效的操作?

rhfm7lfc

rhfm7lfc1#

它看起来像{{ data.0 }}。请参阅变量和查找。

5f0d552i

5f0d552i2#

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

经过测试,运行良好^_^

nfzehxib

nfzehxib3#

{{ data.0 }}应该可以工作。
假设你写了data.obj,django尝试data.objdata.obj(),如果它们不起作用,它尝试data["obj"],在你的例子中,data[0]可以写为{{ data.0 }},但是我建议你把data[0]拉到视图中,并作为单独的变量发送。

lx0bsm1f

lx0bsm1f4#

@jennifer06262016,你完全可以添加另一个过滤器来返回djangoQueryset中的对象。

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

在这种情况下,您可以键入类似于{{ Queryset|索引:x|get_item }}到你的模板中去访问一些字典对象。

sqyvllje

sqyvllje5#

首先确保将包含自定义标记功能的应用程序添加到INSTALLED APP中,请按照以下说明操作

1在主目录应用程序中创建另一个目录,名称为templatags,与model.pyviews.py、urls.py处于同一级别。
2在templatags目录内创建init.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]

在www.example.com中views.py:

number = [0,1,2,3,4,5]

return render(
    "index.html", {"number":number}


在index.html中:

{% load my_tags %}

{{numer|get:forloop.counter0}}

参考How to create custom template tags and filters

  • 我希望你能理解,因为英语不是我的母语 *

相关问题