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

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:自定义模板过滤器实现动态取字典值

如果存在必须用动态键查字典的场景,可以自己实现一个通用的模板过滤器:

  1. 在你的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)
  1. 在模板顶部引入自定义过滤器:
{% load dict_tools %}
  1. 把原来的menu[cat_id]替换为menu|get_item:cat_id即可:
{% if 'sub_cat' in menu|get_item:cat_id %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:36:04