【问题标题】:Django / Python: Calculate total amount of item in django templateDjango / Python:计算django模板中的项目总量
【发布时间】:2015-02-02 11:31:23
【问题描述】:

如何在 django 模板中计算总数?

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

我有以下数据:

obj = [{"location": "name", "timeSlot": '09:30 PM', "price": 2}, {"location": "name", "timeSlot": '09:30 PM', "price": 1}, {"location": "name", "timeSlot": '09:30 PM', "price": 3}, {"location": "name", "timeSlot": '09:30 PM', "price": 2}, {"location": "name", "timeSlot": '09:30 PM', "price": 4}]

所需的报告输出

 --------------------
        09:30 PM
  --------------------
    1   name   $ 2
    2   name   $ 1
    3   name   $ 3
    4   name   $ 4
------------------------
    Total      $ 10 

【问题讨论】:

  • 模板不是执行此操作的合适位置:视图是。这些数据的来源是什么?它来自模型查询吗?如果有,请出示。
  • 数据以 json 格式传入 arg 到 html 模板。即 args['obj'] = orderList
  • 这不是我问的。它来自哪里?
  • 是的,数据来自模型查询——orders=order.objects.filter(id=timeslot)

标签: python django django-templates


【解决方案1】:

模板不是执行此操作的正确位置。您应该在视图或模型中执行此操作。例如,在您收到订单后,您可以执行以下操作:

orders=order.objects.filter(id=timeslot)
total = 0
for order in orders:
    total += order['price']

return render(request, 'your_template', {'orders': orders, 'total': total})

现在,total 将与订单一起出现在您的模板中

【讨论】:

    【解决方案2】:

    我为此使用了自定义过滤器。

    这是我的 customFilter.py 代码

    from django import template
    register = template.Library()
    
    @register.filter
    def slotTotalAmount(arg):
        return sum(d.get('price') for d in arg)
    

    这是我的 django 模板代码

    {% load custom_filters %}
    <span class="pull-left" ><b>Total</b></span>
    <span class="pull-right"><b>{{Obj|slotTotalAmount|floatformat:0}}</b></span>
    

    在两种情况下编写一个并给出相同的输出非常容易,即用 view.py 和 customFilter.py 编写。

    【讨论】:

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