【问题标题】:Django sum of row in template for loopDjango循环模板中的行总和
【发布时间】:2014-02-19 15:51:08
【问题描述】:

我想在我的模板中显示小计的总和。

{% for quote in quotes %}
    {% for product in quote.purchase_quote_products_set.all %}
        {{product.subtotal}} | 
    {% endfor %}
    <span id="total"></span>
{% endfor %}

我的结果。

15 | 120 | 2000 |

有什么方法可以显示span#total 内的小计总和

<span id="total">{{ sum_of_subtotal }}</span>

【问题讨论】:

  • 在模板中使用set 进行变量声明。为 total 制作过滤器。 http://stackoverflow.com/questions/5275639/sum-in-html-template-using-template-tag

标签: python django


【解决方案1】:

最好在 Django 视图而不是模板中执行此类算术。例如您可以在视图本身中找到总和:

from django.db.models import Sum
total_price = Quotes.objects.all().annotate(total=Sum('purchase_quote_products__subtotal'))

那么模板就可以使用了:

<span id="total">{{ quote.total }}</span>

【讨论】:

    【解决方案2】:

    如果你想在模板上进行计算,那么在 Django 模板中有一个叫做过滤器的东西,用于在变量渲染到 UI 之前改变它们的值。

    自定义过滤器只是接受一两个参数的 Python 函数:

    • 变量(输入)的值——不一定是字符串。
    • 参数的值 - 这可以是默认值,也可以完全省略。
    • 例如,在过滤器 {{ var|foo:"bar" }} 中,过滤器 foo 将传递变量 var 和参数“bar”。

    过滤器函数应该总是返回一些东西。他们不应该引发异常。他们应该默默地失败。如果出现错误,它们应该返回原始输入或空字符串——以更有意义的为准。

    这是一个示例过滤器定义:

    def cut(value, arg):
        """Removes all values of arg from the given string"""
        return value.replace(arg, '')
    

    下面是如何使用该过滤器的示例:

    {{ somevariable|cut:"0" }}
    

    请阅读以下文档以获取更多信息,custom_template

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-21
      • 2012-07-25
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多