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

しかし、私の出力は次のように表示されるはずです: if empID change(1046,8008,8011) then {{ forloop.counter }} should start with one(1) and {{ result }} should display first element((1046,5.5)最初の ID(1046) の場合、2 番目の ID(8008',4.5) の要素、2 番目の 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. string からすべてではなく、特定の empID のみを合計表示:

    回答: 属性名、辞書キー、またはカウンターから配列内の特定のインデックスのみを表示できないリスト インデックスに変数を使用できないため、これを行うことはできません。テンプレートに表示する前に、この値をリスト DBShots1 に追加するか、カスタム テンプレート タグを作成する必要がある場合があります。

  2. empID が変更されるたびにカウンターをリセットします。

    回答: regroup関数を使用して、各 empID に対して別の for ループを作成するリストを並べ替えることができます https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#regroup

例えば

{% 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 を使用する必要はありません。

インデックスを作成する必要がありますresultforloop.counter0、django テンプレート システムではできません。

カスタム タグを作成してこれを行うか、ビューを変更して結果をオブジェクト コンテキストに追加することができます。

于 2012-11-19T11:08:43.093 に答える