Как установить один счетчик для двух forloops?

У меня есть таблица:

{% for item in items %}
    <tr>
        <td>{{ forloop.counter }}</td>
        <td>{{ item.field }}</td>
    </tr>
    {% for child in item.childs.all %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ child.field }}</td>
        </tr>
    {% endfor %}
{% endfor %}

Но второй forloop.counter считает внутри второго цикла с 1. Я хочу получить только один счетчик для всех строк. Как это сделать?


person Nips    schedule 20.04.2015    source источник


Ответы (1)


Вы можете написать собственный тег шаблона для вычислить счетчик (при условии, что каждая строка имеет одинаковое количество столбцов):

@register.simple_tag
def abs_counter(row, col, col_total)
    return return ((row - 1) * col_total) + col

а также

{% for item in items %}
...
    {% for child in items.children.all %}
        {% abs_counter forloop.parentloop.counter forloop.counter items.children.all|length %}
    {% endfor %}
{% endfor %}
person Timmy O'Mahony    schedule 20.04.2015