Django模板无法展示API返回的JSON数据问题求助
Django模板无法展示API返回的JSON数据?这里帮你一步步排查解决!
看起来你已经搞定了API调用和JSON生成的环节,卡在了模板展示这一步对吧?先帮你理清楚问题所在,再给你具体的解决方案:
首先先确认你的核心问题:你把API返回的JSON数据以dataset为名传给了Django模板,但没法正常渲染展示。先看你给出的JSON结构:
{"response_code":1, "response":{"a":"01/07/2017", "b":"12", "c":"23", "d":"34", "e":"45", "f":"56"}, "error_code":null, "error_message":null}
还有你提到的视图片段里用了json.dumps()——这很可能是第一个坑!
第一步:先修正视图里的JSON处理逻辑
你用json.dumps()是把Python对象转成JSON字符串,但Django模板需要的是可直接访问的Python字典。正确的做法应该是把API返回的JSON字符串解析成字典:
import requests import json def your_view(request): # 你的API配置 url = "你的API地址" payload = {} headers = {} querystring = {} # 调用API response = requests.request("GET", url, data=payload, headers=headers, params=querystring) # 重点:把API返回的JSON解析成Python字典 # 方法1:用json.loads()解析response.text dataset = json.loads(response.text) # 方法2:更简单,用requests自带的json()方法(推荐) # dataset = response.json() # 传给模板 return render(request, 'your_template.html', {'dataset': dataset})
可以在视图里加两行打印代码,确认数据格式正确:
print(type(dataset)) # 应该输出 <class 'dict'> print(dataset) # 检查结构是否和你给出的JSON一致
第二步:在模板里正确访问数据
你的业务数据嵌套在response字段里,所以不能直接访问dataset的顶层,要先拿到dataset.response:
<!-- 先验证数据是否传到模板:打印响应状态码 --> <p>API响应状态码:{{ dataset.response_code }}</p> <!-- 直接展示单个字段 --> <div class="data-container"> <p>日期:{{ dataset.response.a }}</p> <p>数值b:{{ dataset.response.b }}</p> <p>数值c:{{ dataset.response.c }}</p> <!-- 其他字段d/e/f同理 --> </div> <!-- 如果字段多,用循环遍历更高效 --> <ul class="data-list"> {% for key, value in dataset.response.items %} <li>{{ key }}: {{ value }}</li> {% endfor %} </ul>
第三步:排查常见的模板坑
- 拼写错误:JSON的键是大小写敏感的!比如别把
dataset.response写成dataset.respone,或者a写成A。 - 模板继承问题:如果你的模板是
extends某个基础模板,要确保把内容放在正确的block标签里,不然内容会被基础模板覆盖。 - 数据是否真的传到模板:可以在模板里用
{{ dataset|pprint }}强制打印整个数据集,看看数据是否存在。如果显示的是一串JSON字符串,说明你视图里还是用了json.dumps(),赶紧改成解析字典的方式!
内容的提问来源于stack exchange,提问作者Sapna Sharma
相关产品推荐
相关产品推荐

