【问题标题】:Reference list item by index within Django template?在 Django 模板中按索引引用列表项?
【发布时间】:2011-06-06 18:36:25
【问题描述】:

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

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

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    看起来像{{ data.0 }}。见Variables and lookups

    【讨论】:

    • 烦人的是我不能说{{ data.foo }},其中foo是一个变量,里面有一个索引值,而不是一个属性名。
    • 如果您愿意创建自定义标签,您可以做的更多。在这里,我们只是使用内置的东西。
    • 链接失效了,试试这个:docs.djangoproject.com/en/1.10/ref/templates/api/…
    【解决方案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 }}
    

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

    【讨论】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-05-25
        • 2015-06-13
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        • 2018-08-06
        • 2011-01-30
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多