Django模板中的总计/小计

时间:2014-03-12 23:38:29

标签: python django django-templates django-views

我很难绕过一个简单的问题。如何计算django模板中的总计和小计?

假设我想生成一份客户订单报告,例如:

Desired Report Output

    Customer1
    1   Widgets   $ 2
    1   Bobbins   $ 1
        Subtotal  $ 3

    Customer2
    2   Widgets   $ 4
    2   Bobbins   $ 2
        Subtotal  $ 6

        TOTAL     $ 9

我们假设我们在视图中填充字典

orgs = {}
orgs['Customer1'] = [
    { 'qty': 1, 'descr' : 'Widgets', 'price': 2 },
    { 'qty': 1, 'descr' : 'Bobbins', 'price': 1 },
    ]
...

这样的模板:

{% for org,orders in orgs.items %}
<p>{{ org }}
    {% for order in orders %}
    <ul>
        <li>{{ order.qty }}</li>
        <li>{{ order.descr }}</li>
        <li>{{ order.price }}</li>
    </ul>
...

关于如何计算总计/小计的任何想法?

我理解基本的建议是在视图中执行此操作,但我无法弄清楚如何将其放入orgs dict中。根据django文档(https://docs.djangoproject.com/en/dev/ref/templates/api/#variables-and-lookups),尝试使用并行数据结构似乎是不可能的。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

不是组织键的值是字典列表,而是让它成为一个字典,其中包含一个名为orders的键和另一个名为subtotal的键

如果传入了组织词典,请按照以下方式进行更改。

total = 0
for org in orgs:
    orders = orgs[org]
    subtotal = sum(order['qty']*order['price'] for order in orders)
    total += subtotal
    orgs[org] = {'orders': orders, 'subtotal': subtotal}

现在,在您的模板中,您将执行以下操作:

{% for org,org_data in orgs.items %}
<p>{{ org }}
    {% for order in org_data.orders %}
    <ul>
        <li>{{ order.qty }}</li>
        <li>{{ order.descr }}</li>
        <li>{{ order.price }}</li>
    </ul>
    {% endfor %}
    Subtotal: {{ org_data.subtotal }}
</p>
{% endfor %}
<p>Total: {{total}}</p>