Django模板标签动态调用字典报错,求解决方法
解决Django模板标签中动态获取模块内字典的问题
问题出在你对模块属性的访问方式上——你现在写的dict.value[arg]是在尝试直接访问property.dictionary模块里名为value的字典,但实际上value是你传入的字符串参数(比如"list_type_dict"),模块里根本没有叫value的字典,所以才会报错说不存在这个键。
给你两个关键的修正点,直接改代码就能解决:
- 用
getattr()函数根据字符串参数动态获取模块里的字典对象 - 建议把模块别名从
dict改成dict_module,避免和Python内置的dict类型混淆,减少代码歧义
修改后的模板标签代码如下:
import property.dictionary as dict_module def getlisttype(value, arg): # 根据传入的字典名称字符串,从模块中获取对应的字典对象 target_dict = getattr(dict_module, value) # 用get方法取值,键不存在时返回空字符串(也可以改成你需要的默认值) return target_dict.get(arg, "")
额外给你两个小建议:
- 使用
dict.get(arg, 默认值)代替直接dict[arg],这样如果传入的arg在字典里不存在,模板渲染时不会直接抛出异常,而是返回你设置的默认值,代码更健壮。 - 确保在模板中传入的
value参数是dictionary.py里实际存在的字典名称,比如"list_type_dict"或者"list_category_dict",大小写要完全匹配。
举个模板里的使用例子,方便你参考:
{% load your_tag_name %} {# 获取list_type_dict中键为1的值,会输出Sale #} {{ "list_type_dict"|getlisttype:1 }} {# 获取list_category_dict中键为2的值,会输出Commercial #} {{ "list_category_dict"|getlisttype:2 }}
内容的提问来源于stack exchange,提问作者p.ry
相关产品推荐
相关产品推荐

