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カウンターの位置に応じて、「result」変数の項目を出力したいと思います。これは、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 に答える