Django模板遍历JSON对象及访问嵌套字段值的方法
Django模板遍历嵌套JSON对象实现方法
Django模板对传入的Python字典(即解析后的JSON结构)支持点语法逐层取值,配合for标签即可完成任意层级的遍历,不需要额外引入第三方库。
正确写法示例
针对给出的JSON结构,在monitor.html中按如下方式写即可拿到progress下的嵌套字段:
<!-- 遍历外层所有节点(node-A、node-B) --> {% for node_key, node_val in data_context.items %} <div class="node-block"> <h4>当前节点:{{ node_key }}</h4> <p>测试字段1:{{ node_val.test1A }}</p> <p>测试字段2:{{ node_val.test2A }}</p> <p>测试字段3:{{ node_val.test3A }}</p> <!-- 直接取嵌套progress下的固定字段 --> <div class="progress-wrap"> <p>配置项conf:{{ node_val.progress.conf }}</p> <p>位置项loc:{{ node_val.progress.loc }}</p> </div> <!-- 如果progress下字段不固定,也可以继续嵌套遍历 --> <!-- <ul> {% for pro_key, pro_val in node_val.progress.items %} <li>{{ pro_key }}:{{ pro_val }}</li> {% endfor %} </ul> --> </div> {% endfor %}
取不到嵌套值的常见排查点
- 传入模板的不是解析后的字典:如果视图层拿到的是原始JSON字符串,必须先做解析再传参,正确的视图代码示例:
import json from django.shortcuts import render def monitor_view(request): # 假设raw_json是接口返回/文件读取的原始JSON字符串 raw_json = '{"data": {"node-A": {...}, "node-B": {...}}}' json_data = json.loads(raw_json) # 字符串转字典这一步不能漏 return render(request, 'monitor.html', {"data_context": json_data['data']}) - 层级写错:
progress是每个子节点下的属性,不能直接写{{ data_context.progress.conf }},必须先遍历到单个节点层级后再向下取值。 - 键名包含特殊字符:如果硬编码取带横杠、空格的键名(比如直接写
{{ data_context.node-A }}),模板会把横杠识别为减号导致取值失败,这种场景优先用items遍历取键值对,不要硬编码键名。
内容的提问来源于stack exchange,提问作者rens
相关产品推荐
相关产品推荐

