ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Django 模板中使用嵌套的 for 循环访问最外层的 forloop.counter?

是否可以在 Django 的以下模板中访问最外层 for 循环的 forloop.counter:

{% for outerItem in outerItems %}
    {% for item in items%}
        <div>{{ forloop.counter }}.&nbsp;{{ item }}</div>
    {% endfor %}
{% endfor %}

forloop.counter 返回上例中最内层的 for 循环计数器


T
Tom

您可以使用 forloop.parentloop 到达外部 forloop,因此在您的情况下为 {{forloop.parentloop.counter}}


M
MohitC

您也可以使用 with

以更简单的名称缓存复杂变量。这在多次访问“昂贵”方法(例如,访问数据库的方法)时很有用。

{% for outerItem in outerItems %}
  {% with forloop.counter as outer_counter %}
    {% for item in items%}
        <div>{{ outer_counter }}.&nbsp;{{ item }}</div>
    {% endfor %}
  {% endwith %}
{% endfor %}

如果使用高版本的 Django,你可以使用

{% with outer_counter=forloop.counter %}

注意:With 不允许在 = 之前或之后有空格

我检查过,Django 1.4.x - Django 1.9.x 支持这两种方法。

当有很多 for 循环时,这更清楚


A
AndyTheEntity

在某些情况下,forloop.parentloop 是不够的。

查看 django-templateaddons3 及其 {% counter %} 标记以获得完整的解决方案。