2

在这里,我从数据库中获取具有持续时间的员工。具有 2 或 3 条记录的同一员工。所以获取员工持续时间并添加和显示,如果员工 ID 发生变化,那么它会再次计算员工持续时间并显示我需要查找每个员工 ID 有多少条记录,通过{{ forloop.counter }}单独

我的问题在这里...

  1. 如果我的循环来{% ifchanged eachSc.laEmpNum %}{{ result.0 }}。如果再然后{{ result.1 }}然后{{ result.2 }}等等...

  2. 如果我的循环来了,{% ifchanged eachSc.laEmpNum %}那么我{{ forloop.counter }}应该再次从 0(零)开始。

result = [5.5, 4.5, 1.3]我从中得到的view.py

{% for eachSc in DBShots1 %}

<tr>
    {% ifchanged eachSc.laEmpNum %} 

    <td bgcolor="#FFFACD" width="1%">Tot={{ result }}</td>
    {% endifchanged %}

</tr>
    <td bgcolor="#FFFACD" width="1%">{{ forloop.counter }} </td> 

    <td bgcolor="#CCFACD" width="1%">{{ eachSc.sName }}</td>

    <td bgcolor="#CCF0F5" width="1%">{{ eachSc.duration }}</td>

    <td bgcolor="#CCFACD" width="1%">{{ eachSc.frames }}</td>

    <td bgcolor="#CCFACD" width="5%">{{ GetEmpDept }} - {{ getEmpName.emp_name }} - {{ eachSc.laEmpNum }}</td>
{% endfor %}
4

1 回答 1

1

我相信这里有几个问题需要处理。首先,我看到您要打印“结果”变量的一项,具体取决于 forloop 计数器的位置。这在 django 模板中是不可能的(出于各种合理的原因)。要在不重新组织视图中的数据的情况下快速解决此问题,您可以定义一个自定义过滤器,它只返回指定索引上的列表项。你可以把它放在你的 templatetags/myfilters.py 中:

from django import template
register = template.Library()

@register.filter
def getitem(mylist, index):
    return mylist[index]

然后,要在“laEmpNum”更改时重置 forloop 计数器,您应该使用“regroup”django 模板标签,如下所示:

{% load myfilters %}
{% regroup DBShots1 by laEmpNum as eachScList %}
{% for eachScGrp in eachScList %}
    {% for eachSc in eachScGrp.list %}
    <tr>
      <td bgcolor="#FFFACD" width="1%">{{ forloop.counter }} </td> 
      <td bgcolor="#CCFACD" width="1%">{{ eachSc.sName }}</td>
      <td bgcolor="#CCF0F5" width="1%">{{ eachSc.duration }}</td>
      <td bgcolor="#CCFACD" width="1%">{{ eachSc.frames }}</td>
      <td bgcolor="#CCFACD" width="5%">{{ GetEmpDept }} - {{ getEmpName.emp_name }} - {{ eachSc.laEmpNum }}</td>
     </tr>
    {% endfor %}
    <tr>
        <td> </td><td> </td>
        <td bgcolor="#FFFACD" width="1%">Tot={{ result|getitem:forloop.counter0 }}</td>
    </tr>
{% endfor %}

第一行加载我们的自定义过滤器库。最后一部分使用自定义过滤器根据对“laEmpNum”分组器的迭代来检索结果项。

于 2012-11-19T12:34:32.910 回答