在Django中使用floatformat过滤器前是否需要注册?为何报不存在该过滤器
问题原因
该报错的核心是你当前使用的模板引擎未内置floatformat过滤器,最常见的场景如下:
- 你将项目模板引擎配置为了Jinja2:
floatformat是Django原生模板引擎的内置过滤器,Jinja2原生不提供该过滤器 - 若你确认使用的是Django原生模板引擎,大概率是项目模板配置中手动禁用了默认过滤器库,导致内置的
floatformat没有被加载
解决方案
先确认模板引擎类型
查看项目settings.py中TEMPLATES配置的BACKEND字段:- 若值为
django.template.backends.jinja2.Jinja2,说明用的是Jinja2引擎 - 若值为
django.template.backends.django.DjangoTemplates,说明用的是Django原生模板引擎
- 若值为
对应场景修复
场景1:使用Jinja2引擎
直接用Jinja2自带的round过滤器替代floatformat即可,效果完全一致:
- 原测试代码
{{ 1.223|floatformat }}替换为{{ 1.223|round }} - 你的业务代码修改如下:
<div>{{ context_findings["overdue_findings"] }} | {{ (context_findings["overdue_findings"] / context_findings["total_findings"] * 100)|round }}%</div>
如果需要指定保留小数位数,比如保留2位,将round改为round(2)即可。
场景2:使用Django原生模板引擎
检查TEMPLATES配置的OPTIONS下的builtins字段,确保引入了默认过滤器库django.template.defaultfilters,正常默认配置下无需额外配置,若你手动修改过该配置,补加对应引用即可。
内容的提问来源于stack exchange,提问作者E_K
相关产品推荐
相关产品推荐

