如何使用Django在列表迭代期间显示索引?

时间:2011-11-10 23:57:59

标签: python django

我将列表传递给视图。我的数组如下所示:[football, basketball, soccer]。在我看来,我想展示这样的东西:

1. football
2. basketball
3. soccer

这意味着我必须遍历传递给数组的列表,对元素执行for循环。我将如何在模板文件中执行此操作?

对于每个元素,我必须获取其索引并向其添加1。现在,我不知道如何在视图中执行此操作。我想这样做的一种方法是创建一个字典,如{'1', 'football': '2', 'basketball': '3', 'soccer'},但由于我已经有了列表格式的数据,我宁愿不转换它。

3 个答案:

答案 0 :(得分:30)

您需要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>

答案 1 :(得分:3)

@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

答案 2 :(得分:0)

由以上answer提供

如果某人需要使用循环迭代计数的条件,则可以使用此代码块。

2用于说明integer

{% if forloop.counter == 2 %}
do something what you want for second iteration
{% endfor %}