Python 如何在不重置的情况下使用django中的forloop计数器
我有这个密码Python 如何在不重置的情况下使用django中的forloop计数器,python,django,Python,Django,我有这个密码 {% for d in list1 %} {% for o in d.list2 %} <tr> <td>{{ forloop.counter}} </td> <td>{{ o.name}}</td> </tr> {% endfor %} {% endfor %} {list1%中d的% {d.list2
{% for d in list1 %}
{% for o in d.list2 %}
<tr>
<td>{{ forloop.counter}} </td>
<td>{{ o.name}}</td>
</tr>
{% endfor %}
{% endfor %}
{list1%中d的%
{d.list2%中的o的%s}
{{forloop.counter}
{{o.name}}
{%endfor%}
{%endfor%}
父循环更改后,计数器将重置
有没有办法使每个list1循环的计数器不复位。我想从列表1中的所有
d
中列出列表2中的所有项目,从0-10
forloop开始。正如您所发现的,计数器仅指内部循环的计数器。您可以使用forloop.parentloop.counter
访问外部循环的计数器,这会有一点帮助
但是,如果您有这样的数据:
list1 = [
{'list2': [
{'name': 'd1 o1'},
{'name': 'd1 o2'}]},
{'list2': [
{'name': 'd2 o1'},
{'name': 'd2 o2'},
{'name': 'd2 o3'}]},
{'list2': [
{'name': 'd3 o1'},
{'name': 'd3 o2'}]}
]
flat_list = list({'d': d, 'o': o} for d in list1 for o in d['list2'])
您希望产生如下输出:
<tr><td>1 </td><td> d1 o1 </td></tr>
<tr><td>2 </td><td> d1 o2 </td></tr>
<tr><td>3 </td><td> d2 o1 </td></tr>
<tr><td>4 </td><td> d2 o2 </td></tr>
<tr><td>5 </td><td> d2 o3 </td></tr>
<tr><td>6 </td><td> d3 o1 </td></tr>
<tr><td>7 </td><td> d3 o2 </td></tr>
然后可以按如下方式打印列表:
{% for i in flat_list %}
<tr>
<td>{{ forloop.counter}} </td>
<td>{{ i.o.name}}</td>
</tr>
{% endfor %}
{% load counter_tags %}
{% counter_from 1 as counter %}
{% for d in list1 %}
{% for o in d.list2 %}
<tr>
<td>{{ counter }} </td>
<td>{{ o.name}}</td>
</tr>
{% endfor %}
{% endfor %}
在模板中有一个独立于循环的计数器 正如您所发现的,计数器只指内部循环的计数器。您可以使用forloop.parentloop.counter
访问外部循环的计数器,这会有一点帮助
但是,如果您有这样的数据:
list1 = [
{'list2': [
{'name': 'd1 o1'},
{'name': 'd1 o2'}]},
{'list2': [
{'name': 'd2 o1'},
{'name': 'd2 o2'},
{'name': 'd2 o3'}]},
{'list2': [
{'name': 'd3 o1'},
{'name': 'd3 o2'}]}
]
flat_list = list({'d': d, 'o': o} for d in list1 for o in d['list2'])
您希望产生如下输出:
<tr><td>1 </td><td> d1 o1 </td></tr>
<tr><td>2 </td><td> d1 o2 </td></tr>
<tr><td>3 </td><td> d2 o1 </td></tr>
<tr><td>4 </td><td> d2 o2 </td></tr>
<tr><td>5 </td><td> d2 o3 </td></tr>
<tr><td>6 </td><td> d3 o1 </td></tr>
<tr><td>7 </td><td> d3 o2 </td></tr>
然后可以按如下方式打印列表:
{% for i in flat_list %}
<tr>
<td>{{ forloop.counter}} </td>
<td>{{ i.o.name}}</td>
</tr>
{% endfor %}
{% load counter_tags %}
{% counter_from 1 as counter %}
{% for d in list1 %}
{% for o in d.list2 %}
<tr>
<td>{{ counter }} </td>
<td>{{ o.name}}</td>
</tr>
{% endfor %}
{% endfor %}
在模板中有一个独立于循环的计数器 您必须在视图中创建平面列表,并将其传递给模板,而不是嵌套列表。尚未尝试,但您可能会看到with
:在外部循环中,{%with counter=forloop.counter%}
而在内部循环中,{{counter}}
哦,很抱歉with
无法满足您的需要;(您必须在视图中创建平面列表,并将其传递给模板,而不是嵌套列表。尚未尝试,但您可能会看到with
:在外部循环中,{%with counter=forloop.counter%}
而在内部循环中,{{counter}}
哦,很抱歉with
无法满足您的需要。
)(