0

可能重复:
Python-Django:ifchanged 模板标签

这是我现在的代码:

{% 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 }} 应该以 one(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)
4

2 回答 2

1

你有2个问题:

  1. 仅显示特定的 empID 而不是全部来自字符串:

    Ans:您不能这样做,因为您不能将变量用于属性名称、字典键或列表索引,这使得您不能仅从计数器显示数组中的特定索引。您可能需要将此值放入您的列表 DBShots1,然后再将其显示在模板上或创建自定义模板标签。

  2. 每次更改 empID 时重置计数器:

    Ans:您可以使用 regroup 函数对列表进行排序,这将为每个 empID https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#regroup创建另一个 for 循环

例如

{% 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 %}
于 2012-11-19T11:17:23.770 回答
0

你不需要在这里使用 ifchanged。

您应该使用 django 模板系统为您的索引编制索引resultforloop.counter0但这是不可能的。

您可以编写一个自定义标签来执行此操作或更改您的视图,将您的结果添加到对象上下文中。

于 2012-11-19T11:08:43.093 回答