gpt4 book ai didi

python - forloop.counter 表示 for 标签已经循环了多少次

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:34 26 4
gpt4 key购买 nike

目前正在学习 Django 教程(投票)。

我知道 for 标记允许您循环遍历列表或字典以执行您定义的任何操作。

但是计算 for 标记通过其循环的次数的目的是什么?

此外,循环遍历同一个列表/字典不止一次的例子是什么?

这里有点困惑......

<h1>{{ poll.question }}</h1> 
{% if error_message %}
<p><strong>{{ error_message }}</strong></p>
{% endif %}
<form action="{% url 'polls:vote' poll.id %}" method="post">{% csrf_token %}
{% for choice in poll.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label>
<br />
{% endfor %}
<input type="submit" value="Vote" />
</form>

在这种情况下,foorloop.counter 的目的是什么?

最佳答案

模板变量forloop.counter返回当前 for 循环的当前迭代,从一开始索引。在很多情况下可能会用到这个变量。一个例子是这样的:

<table>
<thead>
<tr>
<th>#</th>
<th>Object</th>
</tr>
</thead>
<tbody>
{% for object in objects %}
<tr>
<td>{{ forloop.counter }}</td> {# Print the number of the list, starting at 1 #}
<td>{{ object }}</td> {# Print object unicode #}
</tr>
{% endfor %}
</tbody>
</table>

将打印一个类似于此的表格(当然带有适当的渲染):

# | Object
------------
1 | Object 3
2 | Object 7
3 | Object 2

请注意,除非对象的 QuerySet 以某种方式排序,否则它们的顺序可能是任意的。对象的id与for循环的迭代次数无关。

还有forloop.counter0这将返回当前迭代,从 0 开始索引。


虽然您的第二个问题有些不相关,但您可能想要多次遍历列表以在不同部分呈现该列表中的信息。因此,也许您有一个显示有关对象信息的列表,然后在页面下方的另一个列表显示有关该对象的不同信息。

但是,我要说的是,最好尽可能避免多次迭代列表,因为这通常是不必要的。

当然,除非你需要它,否则不要担心使用它,但我想了解它是件好事。


在您更新的示例中 forloop.counter变量用于区分表单中的选项。所以idfor都等于 choice# , 其中#是循环的当前迭代。

id <input> 的领域标签允许 <label>标签来识别(通过 for 字段)<input>它应该显示的标签。否则,标签不知道要显示哪个单选按钮。

文档是这样描述表单的目的的:

The above template displays a radio button for each question choice. The value of each radio button is the associated question choice’s ID. The name of each radio button is "choice". That means, when somebody selects one of the radio buttons and submits the form, it’ll send the POST data choice=# where # is the ID of the selected choice. This is the basic concept of HTML forms.

请注意 forloop.counter value 仅用于正确显示 HTML 表单,它的值实际上并没有以任何重要方式使用。 forloop.counter 的值与实际选择没有关联,因此您可以看到表单发布了选择的 id , 而不是 forloop.counter值(value)。


为了给您更多的说明,这里有一个您不需要需要 forloop.counter 的例子变量。

<table>
<thead>
<tr>
<th>ID</th>
<th>Object</th>
</tr>
</thead>
<tbody>
{% for object in objects %}
<tr>
<td>{{ object.pk }}</td> {# Print the pk of the object #}
<td>{{ object }}</td> {# Print object unicode #}
</tr>
{% endfor %}
</tbody>
</table>

可能会打印一个类似于此的表格(当然有适当的渲染):

ID | Object
------------
3 | Object 3
7 | Object 7
2 | Object 2

在您看来,您可以根据对象的 id/pk 对这个对象列表进行排序,如下所示:

queryset = Object.objects.all().order_by('-pk') # Order all objects by pk in descending order

然后,相同的模板将按如下方式呈现您的表格:

ID | Object
------------
2 | Object 2
3 | Object 3
7 | Object 7

通常情况下,for 循环的每次迭代都做同样的事情,而您并不关心它是哪一次迭代。您从教程中发布的示例很好地使用了 forloop.counter ,但这也不是唯一的方法。您也可以使用选项的 pk字段,正如我们所知,这对于每个选择都是唯一的。

关于python - forloop.counter 表示 for 标签已经循环了多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25330402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com