Django Jinja模板出现menu[cat_id]解析报错问题咨询
错误原因
该报错和Python版本无关,不需要调整Python版本。
本质是Django原生模板引擎不支持Python中字典[动态键]的取值语法,模板解析器无法识别[]符号,所以抛出解析失败错误。如果你实际使用的是Jinja2模板引擎,是支持该写法的,出现报错说明你当前项目启用的是Django默认模板引擎。
解决方案
方案1:直接遍历字典键值对(最推荐)
改写模板的for循环,直接遍历menu.items同时获取键和值,不需要再通过键二次查询字典:
{% for cat_id, cat_info in menu.items %} <span class="navbar-item {% if 'sub_cat' in cat_info %} has-dropdown is-hoverable{% endif %}" style="{% if 'sub_cat' in cat_info %}align-items:center{% endif %}" >
直接使用遍历得到的cat_info变量即可获取当前分类的所有属性,代码更简洁高效。
方案2:自定义模板过滤器实现动态取字典值
如果存在必须用动态键查字典的场景,可以自己实现一个通用的模板过滤器:
- 在你的APP目录下新建
templatetags文件夹,文件夹内新增__init__.py(空文件即可)和dict_tools.py两个文件:
# dict_tools.py from django import template register = template.Library() @register.filter def get_item(dic, key): return dic.get(key)
- 在模板顶部引入自定义过滤器:
{% load dict_tools %}
- 把原来的
menu[cat_id]替换为menu|get_item:cat_id即可:
{% if 'sub_cat' in menu|get_item:cat_id %}
内容的提问来源于stack exchange,提问作者Aj06
相关产品推荐
相关产品推荐

