Django模板自定义过滤器取值报错:需2个参数仅传入1个
解决Django模板过滤器报错:"get_value_from_dict requires 2 arguments, 1 provided"
嘿,这个报错的根源其实很简单——你在模板里调用过滤器的语法格式不对!Django对过滤器的参数传递有严格的格式要求:过滤器名称和参数之间的冒号:前后不能加空格,不然Django会识别不到第二个参数,就会出现“缺一个参数”的报错。
你之前的错误写法:
{{ mydictionary | get_value_from_dict : item.id }}
这里get_value_from_dict和:之间、:和item.id之间的空格,会让Django误以为你只传了第一个参数(也就是mydictionary),第二个参数item.id根本没被正确解析进去。
改成正确的写法:
把多余的空格删掉,写成这样就没问题了:
{{ mydictionary|get_value_from_dict:item.id }}
另外再给你提几个小建议,避免后续踩坑:
- 确认过滤器已经正确注册:
- 过滤器要放在app目录下的
templatetags文件夹里(文件夹名必须是这个,而且里面要有__init__.py空文件) - 在使用过滤器的模板顶部,一定要加载你的过滤器模块,比如你的过滤器文件叫
custom_filters.py,就要加一句{% load custom_filters %}
- 过滤器要放在app目录下的
- 可以优化一下过滤器代码,给返回值加个默认值,避免key为空或者不存在时报错:
@register.filter('get_value_from_dict') def get_value_from_dict(dict_data, key): return dict_data.get(key, '') # 当key无效时返回空字符串,页面不会炸
这样调整之后,你的模板循环应该就能正常从字典里取出对应的值啦~
内容的提问来源于stack exchange,提问作者Nabat Farsi
相关产品推荐
相关产品推荐

