Django使用自定义template filter查询活跃员工报Invalid filter错误
问题原因及修复方案
1 直接报错原因:过滤器名称不匹配
报错提示找不到actual_employees过滤器,你实际注册的过滤器名称是active_employees,检查模板文件中是否手误把过滤器名写错成了actual_employees,修正为和注册名一致的active_employees即可解决这个报错。
2 过滤器逻辑错误
你要查询活跃员工,但当前过滤器里写的是filter(active=False),查询的是未活跃的员工,需要修改为:
@register.filter def active_employees(model_instances): return model_instances.filter(active=True)
3 自定义过滤器的必要配置检查
如果修正名称后仍然报过滤器不存在的错误,检查以下配置是否正确:
- 存放过滤器的文件必须放在Django应用下的
templatetags目录中,该目录下必须存在空的__init__.py文件 - 过滤器文件开头必须有以下初始化代码:
from django import template register = template.Library()
- 模板文件顶部必须先加载你的过滤器文件,假设你把过滤器写在了
employee_filters.py中,需要在模板开头加:
{% load employee_filters %}
- 存放
templatetags目录的应用必须已经添加到了settings.py的INSTALLED_APPS列表中
4 可选优化建议
你当前的场景可以直接在模板中调用QuerySet的filter方法,不需要自定义过滤器,写法更简洁:
{% if request.user.employee.filter(active=True).count > 0 %} There is an active employee {% endif %}
内容的提问来源于stack exchange,提问作者Jason Howard
相关产品推荐
相关产品推荐

