You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板出现Invalid filter: 'length_is'错误,求解决方法

解决Django 5.1中length_is过滤器的TemplateSyntaxError问题

关于length_is过滤器的说明

Django官方标准模板过滤器中没有length_is,它大概率是某个第三方库(如早期版本的django-jazzmin或其他Admin美化库)曾经提供的自定义过滤器,或是项目历史中存在但现在被移除的自定义过滤器。你排查后未找到它的定义,说明要么依赖库版本更新后移除了该过滤器,要么旧的自定义过滤器代码被删除/遗漏。

快速替代方案(无需自定义过滤器)

直接用Django自带的length过滤器结合模板比较语法替换原代码,效果完全一致:
将原代码中的

line.fields|length_is:'1'

替换为

line.fields|length == 1

比如原模板中的判断逻辑如果是:

{% if line.fields|length_is:'1' %}
    ...
{% endif %}

改成:

{% if line.fields|length == 1 %}
    ...
{% endif %}

自定义实现length_is过滤器(如需保留原写法)

如果必须保留length_is这个过滤器名称,自己实现一个很简单:

  • 在你的任意Django app下创建templatetags目录,同时在该目录下创建__init__.py空文件(让Python识别为包)
  • 在templatetags目录下新建custom_filters.py文件,写入以下代码:
    from django import template
    
    register = template.Library()
    
    @register.filter(name='length_is')
    def length_is(value, target_length):
        # 处理非可迭代对象或参数无法转成整数的情况
        try:
            return len(value) == int(target_length)
        except (TypeError, ValueError):
            return False
    
  • 在使用该过滤器的模板文件开头加载自定义过滤器:
    {% load custom_filters %}
    

之后就能正常使用line.fields|length_is:'1'了。

版本与配置排查建议

  • 检查django-jazzmin版本:如果你的Admin用了jazzmin,可能旧版本的jazzmin内置了length_is过滤器,但适配Django 5.x的新版本移除了它。可以尝试回退到兼容的jazzmin版本,或者直接用上面的替代方案。
  • 确认项目配置:检查INSTALLED_APPS中是否包含了原本提供该过滤器的app,或是是否有自定义过滤器文件被.gitignore忽略、未被正确加载。

内容的提问来源于stack exchange,提问作者Luka Guledani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:12:37