Почему forloop.counter0 в django сбивается соседним циклом?
У меня есть шаблон, который выглядит следующим образом:
<table>
<tbody>
{% for row in rows %}
<tr>
{% for column in row %}
<td>{{ column }}</td>
{% endfor %}
<td><input type=checkbox name="checkbox_{{ forloop.counter0 }}"></td>
</tr>
{% endfor %}
</tbody>
</table>
Имена чекбоксов в создаваемой таблице начинаются с checkbox_1 вместо checkbox_0.
Если я удалю внутренний цикл for, однако:
<table>
<tbody>
{% for row in rows %}
<tr>
<td>Column 1</td>
<td>Column 2</td>
<td><input type=checkbox name="checkbox_{{ forloop.counter0 }}"></td>
</tr>
{% endfor %}
</tbody>
</table>
Они начинаются с checkbox_0, как и должно быть.
Похоже, что внутренний цикл портит счетчик для внешнего цикла.
Я даже пытался использовать тег with, но это, похоже, не помогло:
<table>
<tbody>
{% for row in rows %}
{% with forloop.counter0 as outer_counter %}
<tr>
{% for column in row %}
<td>{{ column }}</td>
{% endfor %}
<td><input type=checkbox name="checkbox_{{ outer_counter }}"></td>
</tr>
{% endwith %}
{% endfor %}
</tbody>
</table>
Есть идеи, что может идти не так?
Вы должны использовать forloop.parentloop, чтобы добраться до внешнего forloop:
{{forloop.parentloop.counter0}}