Django模板中有用于除法的过滤器吗?

52 投票
6 回答
56136 浏览
提问于 2025-04-17 08:03

我注意到有一个内置的 add 过滤器,但我找不到 divide 这个过滤器。

我刚接触Django,不太确定是否有这样的过滤器。

6 个回答

15

有一个Python模块可以在你的模板中进行数学运算,叫做 Django-Mathfilters

这个模块里有你提到的 add(加法),还有 div(除法)可以用来做除法运算:

 8 / 3 = {{ 8|div:3 }}
34
  1. 在你的Django应用里创建一个叫做templatetags的文件夹,路径是:my_app/templatetags/__init__.py
  2. templatetags文件夹里创建一个模块,并写入以下代码:
# my_app/templatetags/my_custom_filters.py
from django import template

register = template.Library()

@register.filter
def divide(value, arg):
    try:
        return int(value) / int(arg)
    except (ValueError, ZeroDivisionError):
        return None
  1. 在你的模板中,添加以下内容,把my_custom_filters替换成第二步中你创建的模块名:
{% load my_custom_filters %}

{{ 100|divide:2 }}

想了解更多信息,可以查看这个链接:https://docs.djangoproject.com/en/4.1/howto/custom-template-tags/

96

其实没有现成的办法。不过如果你稍微懂点黑客技术的话……

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

想要计算 A*B: {% widthratio A 1 B %}

想要计算 A/B: {% widthratio A B 1 %}

想要计算 A^2: {% widthratio A 1 A %}

想要计算 (A+B)^2: {% widthratio A|add:B 1 A|add:B %}

想要计算 (A+B) * (C+D): {% widthratio A|add:B 1 C|add:D %}

另外,你也可以在两分钟内创建一个过滤器来进行除法运算。

撰写回答