Django模板含@键名字典取值报错及动态嵌套字典处理问题
解决Django模板中嵌套动态键字典的特殊字符键取值问题
核心思路
通过自定义模板过滤器绕过Django模板解析器对@这类特殊字符的限制,同时遍历外层动态键处理嵌套字典结构。
步骤1:编写自定义模板过滤器
在你的Django应用下创建templatetags目录(需包含空的__init__.py文件),新建dict_filters.py文件并写入以下代码:
from django import template register = template.Library() @register.filter def get_item(dictionary, key): # 直接调用字典get方法取值,不受键名特殊字符影响 return dictionary.get(key)
步骤2:在模板中使用过滤器
- 先在模板顶部加载自定义过滤器:
{% load dict_filters %}
- 遍历外层动态键的字典,通过过滤器获取内层带
@的键值:
{% for outer_key, inner_data in mydata_2.items %} <div> 外层键:{{ outer_key }}<br> 模型名称:{{ inner_data|get_item:"@model" }}<br> 类型:{{ inner_data|get_item:"@genre" }}<br> 价格:{{ inner_data.price }} </div> {% endfor %}
说明
- 自定义过滤器
get_item直接调用Python原生字典的get方法,完全避开Django模板语法对特殊字符键的解析限制。 - 外层动态键通过
items方法遍历,无论键是数字还是其他动态生成的值都能正常处理。 - 确保你的应用已添加到
settings.py的INSTALLED_APPS列表中,否则模板无法加载自定义过滤器。
内容的提问来源于stack exchange,提问作者Zembla
相关产品推荐
相关产品推荐

