我很难绕过一个简单的问题。如何计算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),尝试使用并行数据结构似乎是不可能的。
有什么想法吗?
答案 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>