我在页面上有一些循环,需要根据循环数量列表项。
当我调用时:
{{ mylist.1 }}
{{ mylist.2 }}
{{ mylist.3 }}
一切都很好,但我真正需要的是:
{% for x in somenumber|MyCustomRangeTag %}
{{ mylist.x }}
{% endfor %}
MyCustomRangeTag给了我Python range()
,它可以工作,而我已经有了x
作为编号。所以x
是1,2,3等等,这取决于循环的数量。这是可能的吗?如何实现?
发布于 2012-01-21 07:51:48
我注意到@e-satis提到了它,但我认为内置的切片模板标签值得一些喜爱。
{{ item | slice:"2" }} #gets the third element of the list
发布于 2012-01-21 06:08:36
你确定你不能这样做:
{% for item in mylist %}
{{ item }}
{% endfor %}
使用切片过滤器,您甚至可以进行一些自定义。
发布于 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还没有实现成就,但只用了库存部件就完成了。
https://stackoverflow.com/questions/8948430
复制相似问题