Django模板中循环语句求行总和

5
我想在我的模板中显示小计金额的总和。
{% 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 声明变量。为总数创建过滤器。参考链接:http://stackoverflow.com/questions/5275639/sum-in-html-template-using-template-tag - Priyank Patel
2个回答

5
最好在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模板中有一个叫过滤器的东西,用于在将变量呈现给用户界面之前更改变量的值。
自定义过滤器只是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" }}

请阅读以下文档以获取更多信息:自定义模板

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接