Django模板中有用于除法的过滤器吗?
我注意到有一个内置的 add
过滤器,但我找不到 divide
这个过滤器。
我刚接触Django,不太确定是否有这样的过滤器。
6 个回答
15
有一个Python模块可以在你的模板中进行数学运算,叫做 Django-Mathfilters。
这个模块里有你提到的 add
(加法),还有 div
(除法)可以用来做除法运算:
8 / 3 = {{ 8|div:3 }}
34
- 在你的Django应用里创建一个叫做
templatetags
的文件夹,路径是:my_app/templatetags/__init__.py
- 在
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
- 在你的模板中,添加以下内容,把
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 %}
另外,你也可以在两分钟内创建一个过滤器来进行除法运算。