【问题标题】:Totals/Subtotals in Django templateDjango 模板中的总计/小计
【发布时间】:2014-04-17 10:50:29
【问题描述】:

我很难解决一个简单的问题。如何在 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),尝试使用并行数据结构似乎是不可能的。

有什么想法吗?

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:

    组织键的值不是字典列表,而是一个字典,其中一个键名为orders,另一个键名为subtotal

    如果传入了 org 字典,那么你是如何更改它的。

    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>
    

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 1970-01-01
      • 2012-10-25
      • 2021-12-26
      • 2019-03-08
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多