首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在django模板中动态获取列表项

在django模板中动态获取列表项
EN

Stack Overflow用户
提问于 2012-01-21 06:01:19
回答 4查看 31.8K关注 0票数 21

我在页面上有一些循环,需要根据循环数量列表项。

当我调用时:

{{ mylist.1 }}
{{ mylist.2 }}
{{ mylist.3 }}

一切都很好,但我真正需要的是:

{% for x in somenumber|MyCustomRangeTag %}
    {{ mylist.x }}
{% endfor %}

MyCustomRangeTag给了我Python range(),它可以工作,而我已经有了x作为编号。所以x是1,2,3等等,这取决于循环的数量。这是可能的吗?如何实现?

EN

回答 4

Stack Overflow用户

发布于 2012-01-21 07:51:48

我注意到@e-satis提到了它,但我认为内置的切片模板标签值得一些喜爱。

{{ item | slice:"2" }} #gets the third element of the list
票数 6
EN

Stack Overflow用户

发布于 2012-01-21 06:08:36

你确定你不能这样做:

{% for item in mylist %}
    {{ item }}
{% endfor %}

使用切片过滤器,您甚至可以进行一些自定义。

票数 4
EN

Stack Overflow用户

发布于 2013-11-23 01:34:00

Django模板中的切片标记可能使用python的切片代码,但语法明显不同。例如,如果你想获取一个序列的一个元素,在python中,你可以写类似下面这样的代码:

>>>mylist = ["0th Element", "1th Element"]
>>>zero, one = 0, 1
>>>mylist[zero]
"0th Element"
>>>mylist[one]
"1th Element"

将此语法与Django切片模板标记一起使用将在每种情况下返回切片列表,用于获取已知索引的项的可疑实用程序:

{% with "0" as zero %}
{% with "1" as one %}
{% with "2" as two %}

{{mylist|slice:zero}} {{mylist|slice:one}} {{mylist|slice:two}}

{% endwith %}
{% endwith %}
{% endwith %}

呈现到html:

[] ["0th Element"] ["0th Element", "1th Element"]

注意不同之处:您得到的结果是mylist[:x]而不是mylist[x]

Django提供了足够的工具来解决这个问题。第一个技巧是对索引使用显式切片(如0:1 ),然后将结果列表|join:""到单个元素中。如下所示:

{% with "0:1" as zero %}
{{mylist|slice:zero|join:""}}
{% endwith %}

收益率:

0th Element

如果在处理子循环中的迭代器时需要访问父循环的索引,这会特别方便:

{% for parent in parent_loop %}
    {% cycle "0:1" "1:2" "2:3" as parent_loop_index silent %}
    {% for child in child_loop %}
        {{child|slice:parent_loop_index|join:""}}
    {% endfor %}
{% endfor %}

虽然我认为Django还没有实现成就,但只用了库存部件就完成了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8948430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档