django模板中的乘法,而不使用手动创建的模板标签

zhte4eai  于 2023-06-07  发布在  Go
关注(0)|答案(5)|浏览(521)

我想在django template中实现乘法运算。例如,我有值,价格=10.50数量=3
在这个链接的帮助下
http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/
我尝试了下面的代码来实现它,

{% widthratio quantity 1 price %}

但它只返回了31但是我需要浮点数形式的答案(31.5)
我想实现它不使用手动创建的标签
我怎么才能做到呢?感谢您的评分

rks48beu

rks48beu1#

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

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

注意:返回结果前将四舍五入为整数。
@参见https://docs.djangoproject.com/en/dev/ref/templates/builtins/

kuarbcqp

kuarbcqp2#

有两种方法:

  • 计算视图内部的值并将其传递给模板(我认为推荐)
  • 使用模板过滤器

按照addfilter的方式,您可以创建自己的multiply filter,创建自己的自定义filter:

from django import template

register = template.Library()

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

然后在你的模板中,类似的东西应该可以工作。

{{ quantity | multiply:price }}

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

2cmtqfgy

2cmtqfgy3#

另一种方法,我用似乎更干净。如果您正在处理一个查询集,那么在视图中计算值是没有意义的。相反,将计算作为函数添加到模型中!
假设你的模型看起来像这样:

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值在任何地方使用,无论是在模板还是视图中,并确保它始终一致,而不会占用数据库中的空间。

v09wglhw

v09wglhw4#

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

quhf5bfb

quhf5bfb5#

Django中的变量乘法

1st: install & then register "mathfilters" at INSTALLED_APPS in setting.py 
2nd: Add {% load mathfilters %} in html Page 
3rd: Multiply with variable like{{response.notSatisfied|mul:100}}

相关问题