在不使用手动创建的模板标记的情况下在django模板中进行乘法

时间:2013-08-21 06:51:27

标签: django-templates

我想在django模板中实现乘法运算。例如 我有价值观,     价格= 10.50     量= 3

借助此链接

http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/

我尝试了以下代码来实现它,

{% widthratio quantity 1 price %}

但它只返回31.但我需要在float(31.5)中的答案

我想在不使用手动创建的标签的情况下实现它

我怎样才能实现它? 提前谢谢......

4 个答案:

答案 0 :(得分:48)

您可以使用内置的widthratio模板标记。

  • a * b使用{% widthratio a 1 b %}
  • a / b使用{% widthratio a b 1 %}

注意:结果在返回之前四舍五入为整数。

@see https://docs.djangoproject.com/en/dev/ref/templates/builtins/

答案 1 :(得分:14)

有两种方法:

  • 计算视图中的值并将它们传递给模板(在我看来推荐)
  • 使用模板过滤器

add filter的方式,您可以随时创建自己的multiply过滤器,创建自己的custom filter

from django import template

register = template.Library()

@register.filter
def multiply(value, arg):
    return value * arg

然后在你的模板中,类似的东西应该有效。

{{ quantity | multiply:price }}

这没有经过测试,我从来没有这样做 - 再次 - 我发现在视图中计算数据更整洁,并使用模板渲染

答案 2 :(得分:1)

我使用的另一种方法对我来说似乎更清晰。如果您要浏览查询集,则在视图中计算值是没有意义的。相反,将计算添加为模型中的函数!

假设你的模型看起来像这样:

Class LineItem:
    product = models.ForeignKey(Product)
    quantity = models.IntegerField()
    price = models.DecimalField(decimal_places=2)

只需将以下内容添加到模型中:

    def line_total(self):
        return self.quantity * self.price

现在您可以简单地将line_total视为记录中的字段:

{{ line_item.line_total }}

这允许line_total值在模板或视图中的任何位置使用,并确保它始终保持一致,而不占用数据库中的空间。

答案 3 :(得分:0)

我知道这个问题已经很久没有出现了,但是现在有一个名为 django-mathfilters 的库,它使 Django 模板中的数学运算变得更容易。你可以很容易地写 <li>42 * 0.5 = {{ answer|mul:0.5 }}</li> 用于乘法。

检查一下https://pypi.org/project/django-mathfilters/