Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不重置的情况下使用django中的forloop计数器_Python_Django - Fatal编程技术网

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
无法满足您的需要。
)(