Django模板中的总计/小计
我在理解一个简单的问题时遇到了困难。如何在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字典里。而且根据Django的文档,使用一个平行的数据结构似乎也不太可能(https://docs.djangoproject.com/en/dev/ref/templates/api/#variables-and-lookups)。
有没有什么想法?
1 个回答
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>