如何在Django列表迭代中显示索引?

12 投票
3 回答
25267 浏览
提问于 2025-04-17 06:05

我正在把一个列表传递给一个视图。我的数组看起来是这样的:[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>

撰写回答