Django自定义cutter过滤器报Invalid filter: 'cutter'错误咨询
Django报错Invalid filter: 'cutter'的原因和解决方法
核心原因
这个报错和你贴的过滤器业务逻辑无关,本质是Django没有成功加载你写的自定义过滤器,常见诱因有三个:
- 存放
templatetags目录的app没有在settings.py的INSTALLED_APPS中注册,Django启动时不会扫描未注册app下的模板标签文件 - 新增自定义过滤器后没有完全重启Django服务:Django只会在服务启动阶段初始化加载模板标签库,开发模式的自动热重载不会识别新加的模板标签/过滤器,这是最高发的原因
- 模板缓存或浏览器缓存残留,旧的报错信息没有被更新
排查解决步骤
按顺序操作即可:
- 首先确认
templatetags目录位置正确:要放在对应app目录下,和该app的views.py同级,不能放在项目根目录。之后打开项目的settings.py,找到INSTALLED_APPS配置项,确认这个app已经添加到列表中,不存在的话补加一行'my_app', - 完全停掉当前运行的
runserver进程,重新执行python manage.py runserver启动服务,不要依赖Django的自动重载功能 - 浏览器端强制刷新页面(Windows按Ctrl+F5,Mac按Cmd+Shift+R),或者开无痕窗口访问对应页面,清除缓存影响
- 额外确认文件位置:
custom_tags.py要和__init__.py同级,直接放在templatetags目录下,不要误放到__pycache__文件夹里(你贴的目录树缩进存在排版问题,只要实际文件位置正确就不影响)
代码优化建议
你当前的过滤器代码虽然可以运行,但存在不规范写法,建议调整:不要用Python内置类型名list作为参数名,会覆盖内置命名空间,改成通用的value即可:
from django import template from random import randint register = template.Library() def cutter(value, args): return value[args] register.filter('cutter', cutter)
内容的提问来源于stack exchange,提问作者Manny
相关产品推荐
相关产品推荐

