Django行的模板中的行循环

时间:2014-01-28 11:13:25

标签: python django

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

{% 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>

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

如果你试图在模板上进行计算,那么在Django Template中有一些叫做过滤器的东西,用于在变量渲染到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