【问题标题】:Django templates count total in forloopDjango 模板在 for 循环中的总数
【发布时间】:2015-03-21 02:46:11
【问题描述】:

我在 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?还是完全不同的东西?

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    您应该使用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 排序才能正常工作。

    【讨论】:

    • 感谢您的重组选项 - 这帮助很大!请注意:我相信 level.list|count 应该是 level.list|length。计数函数引发错误。
    • 第一行也应该是:regroup by Skill_level_id。另外,level.grouper.skill 不产生任何东西?
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2010-11-09
    • 2019-05-23
    • 2012-07-25
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多