这是我现在的代码:
{% for eachSc in DBShots1 %}
<tr>
{% ifchanged eachSc.laEmpNum %}
<td> </td><td> </td>
<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 }} - {{ eachSc.laEmpNum }}</td>
{% endfor %}
从上面的代码中显示如下:
Tot=[(u'1046', 5.5), (u'8008', 4.5), (u'8011', 1.3)]
1 ------- 01 ------ 2.5 ------------- 60 ------ allLayout - 1046
2 ------- 02 ------ 2.0 ------------- 48 ------ allLayout - 1046
3 ------- 04 ------ 1.0 -------------- 0 ------ allLayout - 1046
Tot=[(u'1046', 5.5), (u'8008', 4.5), (u'8011', 1.3)]
4 ------- 03 ------ 2.3 ------------- 50 ------ allLayout - 8008
5 ------- 06 ------ 2.2 ------------- 0 ------- allLayout - 8008
Tot=[(u'1046', 5.5), (u'8008', 4.5), (u'8011', 1.3)]
6 ------- 05 ------ 1.3 ------------- 0 ------- allLayout - 8011
但是我的输出应该如下所示: 如果empID改变(1046,8008,8011)那么 {{forloop.counter}}应以一(1)开头,{{result}}应显示第一个元素((1046,5.5)作为第一个ID(1046) 第二个(8008',4.5)元素用于第二个ID(8008),依此类推:
1 ------- 01 ------ 2.5 ------------- 60 ------ allLayout - 1046
2 ------- 02 ------ 2.0 ------------- 48 ------ allLayout - 1046
3 ------- 04 ------ 1.0 ------------- 0 ------- allLayout - 1046
Tot=(1046,5.5)
1 ------- 03 ------ 2.3 ------------- 50 ------ allLayout - 8008
2 ------- 06 ------ 2.2 ------------- 0 ------- allLayout - 8008
Tot=(8008', 4.5)
1 ------- 05 ------ 1.3 ------------- 0 ------- allLayout - 8011
Tot=(8011', 1.3)
答案 0 :(得分:1)
你有2个问题:
仅显示特定的empID,而不是全部来自字符串:
Ans :您无法执行此操作,因为您无法将变量用于属性名称,字典键或列表显示,这样您就无法在计数器中仅显示数组中的特定索引。在将该值显示在模板上或创建自定义模板标记之前,您可能需要将此值放入列表DBShots1。
每次更改empID时重置计数器:
Ans :您可以使用重新组合功能对列表进行排序,这将为每个empID创建另一个for循环 https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#regroup
e.g。
{% regroup DBShots1 by eachSc.laEmpNum as emp_list %}
{% for eachSc in emp_list %}
<tr>
<td> </td><td> </td>
<td bgcolor="#FFFACD" width="1%">EmpNum : {{ eachSc.grouper }}</td>
</tr>
{% for item in eachSc.list %}
<td bgcolor="#FFFACD" width="1%">{{ forloop.counter }} </td>
<td bgcolor="#CCFACD" width="1%">{{ item.sName }} </td>
<td bgcolor="#CCF0F5" width="1%">{{ item.duration }}</td>
<td bgcolor="#CCFACD" width="1%">{{ item.frames }}</td>
<td bgcolor="#CCFACD" width="5%">{{ GetEmpDept }} - {{ item.laEmpNum }}</td>
{% endfor %}
{% endfor %}
答案 1 :(得分:0)
这里你不需要使用ifchanged。
您应该使用result
将forloop.counter0
编入索引,但django模板系统无法为其编制索引。
您可以编写自定义标记来执行此操作,也可以更改视图,将结果添加到对象上下文中。