如何在django模板中实现运行总计?

gat*_*ath 4 django

我有一个视图,返回按sales_date分组的销售摘要,例如

[{'sale_date':datetime.datetime(2010,10,5,0,0), 'salesum':2, 'item':1},
 {'sale_date':datetime.datetime(2010,10,5,0,0), 'salesum':10,'item':3},
 {'sale_date':datetime.datetime(2010,10,6,0,0), 'salesum':1, 'item':1}]
Run Code Online (Sandbox Code Playgroud)

我在模板中完成了分组,并将它与html ulli标签结合起来,根据sale_date给出了一个很好的分组效果

我的模板分组基于以下代码:

{% regroup salecursor by sale_date|date:"j/m/Y" as salelist %}
Run Code Online (Sandbox Code Playgroud)

{{ saleitem.grouper }
Run Code Online (Sandbox Code Playgroud)

结果是:

05/10/2010

  • item1名称 - 2
  • item2名称 - 10

06/10/2010

  • 第1项名称 - 1

你如何得到每个组的总计,即第一组应该总共12个,第二组总共1个并且具有这种效果;

05/10/2010

  • item1名称 - 2
  • item2名称 - 10

    共12个

06/10/2010

  • 第1项名称 - 1

    总计1

谢谢Gath

Man*_*dan 10

什么?你不知道running_total过滤器吗?

开玩笑吧.没有一个,但写一个很容易.这是有点低效率的,因为它再次遍历分组列表中sumsalesum数值.

# app_filters.py
@register.filter
def running_total(sales_list):
    return sum(d.get('salesum') for d in sales_list)
Run Code Online (Sandbox Code Playgroud)

您可以在模板中使用它:

{% regroup salecursor by sale_date|date:"j/m/Y" as salelist %}

<ul>
{% for sales in salelist %}
    <li>{{ sales.grouper }}
    <ul>
        {% for item in sales.list %}
        <li>{{ item.item }} - {{ item.salesum }}</li>
        {% endfor %}

        <li>Total: <b>{{ sales.list|running_total }}</b></li>
    </ul>
    </li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)