如何在Django列表迭代中显示索引?
我正在把一个列表传递给一个视图。我的数组看起来是这样的:[football, basketball, soccer]
。在我的视图中,我想显示类似这样的内容:
1. football
2. basketball
3. soccer
这意味着我需要遍历传递给数组的列表,对每个元素进行循环。那么我该如何在模板文件中做到这一点呢?
对于每个元素,我需要获取它的索引,并在这个索引上加1。现在,我对如何在视图中做到这一点完全没有头绪。我想到的一种方法是创建一个字典,像这样:{'1', 'football': '2', 'basketball': '3', 'soccer'}
,但是因为我已经有了列表格式的数据,所以我更希望不去转换它。
3 个回答
1
感谢上面的回答
如果有人需要在循环中使用迭代次数的条件,可以使用这段代码。
2
是用来举例说明一个 整数
。
{% if forloop.counter == 2 %}
do something what you want for second iteration
{% endfor %}
4
@nrabinowitz 的回答是个不错的解决方案,如果你想在模板中使用它。不过我觉得你是想在视图中做到这一点。
从列表中获取索引和对应的值,最好的方法是使用 enumerate
函数,像这样:
>>> sports = ['football', 'basketball', 'soccer']
>>> for i,sport in enumerate(sports):
... print "%d. %s" % (i, sport)
0. football
1. basketball
2. soccer
或者,如果你想要从1开始的索引:
>>> for i,sport in enumerate(sports):
... print "%d. %s" % (i+1, sport)
1. football
2. basketball
3. soccer
43
你需要使用 forloop.counter 这个模板变量。
在 for 循环中,会设置一些可以在循环内使用的变量:
forloop.counter 表示当前循环的次数(从1开始计数)
所以你的代码应该像这样:
{% for sport in sports %}
<p>{{forloop.counter}}. {{ sport }}</p>
{% endfor %}
当然,如果你只是想像问题中那样显示数据,简单的方法是把这些项目放在一个有序列表中,浏览器会自动为你编号:
<ol>
{% for sport in sports %}
<li>{{ sport }}</li>
{% endfor %}
</ol>