我想在django模板中实现乘法运算.例如,我有值,price = 10.50 quantity = 3
借助此链接
http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/
我尝试下面的代码来实现它,
{% widthratio quantity 1 price %}
Run Code Online (Sandbox Code Playgroud)
但它只返回31.但我需要浮动答案(31.5)
我想在不使用手动创建的标签的情况下实现它
我怎样才能实现它?提前致谢...
hah*_*ile 52
您可以使用内置widthratio模板标记.
{% widthratio a 1 b %}{% widthratio a b 1 %}注意:结果在返回之前四舍五入为整数.
@see https://docs.djangoproject.com/en/dev/ref/templates/builtins/
Mat*_*ues 15
有两种方法:
以add过滤器的方式,您可以随时创建自己的multiply过滤器,创建自己的自定义过滤器:
from django import template
register = template.Library()
@register.filter
def multiply(value, arg):
return value * arg
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中,类似的东西应该工作.
{{ quantity | multiply:price }}
Run Code Online (Sandbox Code Playgroud)
这没有经过测试,我从来没有这样做过 - 再次 - 我发现在视图中计算数据并且仅使用模板进行渲染.
我使用的另一种方法对我来说似乎更清晰。如果您正在浏览查询集,则在您的视图中计算值是没有意义的。相反,将计算添加为模型中的函数!
假设您的模型如下所示:
Class LineItem:
product = models.ForeignKey(Product)
quantity = models.IntegerField()
price = models.DecimalField(decimal_places=2)
Run Code Online (Sandbox Code Playgroud)
只需将以下内容添加到模型中:
def line_total(self):
return self.quantity * self.price
Run Code Online (Sandbox Code Playgroud)
现在您可以简单地将 line_total 视为记录中的一个字段:
{{ line_item.line_total }}
Run Code Online (Sandbox Code Playgroud)
这允许该line_total值在模板或视图中的任何地方使用,并确保它始终一致,而不会占用数据库中的空间。
我知道这个问题已经出现很久了,但是现在有一个名为 django-mathfilters 的库,它使 Django 模板中的数学运算变得更容易。您可以轻松地编写
<li>42 * 0.5 = {{ answer|mul:0.5 }}</li>乘法。
查看 https://pypi.org/project/django-mathfilters/