我在 Django 模板中有以下代码。

{% if levels %}
    {% for l in levels %}
        <tr>
            <td class="level">{{ l.skill }}</td>
            {% for e in employees %}
                {% if e.skill_level_id == l.id %}
                    <td class="race">{{ forloop.counter0 }}</td>
                {% endif %}
            {% endfor %}
        </tr>
    {% endfor %}
{% endif %}

这给我的是类似于以下内容(在 HTML 表中):
level1  1  5
level2  4  2  6  3

这意味着 1 级(1 和 5)有 2 名员工,2 级有 4 名员工。我想要的是每个级别的总数:
level1  2
level2  4

我不确定是否应该使用 forloop.counter、forloop.counter0 或 forloop.parentloop.counter?或者完全不同的东西?

最佳答案

您应该使用 regroup 将对象分组到技能级别,而不是循环和过滤。就像是:

{% regroup employees by skill_level as employees_by_level %}
{% for level in employees_by_level %}
    <tr>
        <td class="level">{{ level.grouper.skill }}</td>
        <td class="count">{{ level.list|length }}</td>
        {% for e in level.list %}
            <td class="race">{{ forloop.counter0 }}</td>
        {% endfor %}
    </tr>
{% endfor %}

请注意,您首先需要让员工按 Skill_id 排序才能正常工作。

关于python - Django模板在for循环中的总数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28086581/

10-12 16:52