Django调用REST API返回数据后模板无法渲染内容问题排查
错误原因及修复方案
1. 上下文变量名不匹配
你在视图层render方法中传递给模板的上下文键为response,但模板中循环遍历的变量是data,二者名称不对应,模板无法读取到对应数据,自然不会输出内容。
两种修复方案二选一:
- 修改视图代码,调整上下文键为
data:
return render(request,'PcPeripherals/api.html',{'data':data})
- 修改模板代码,调整遍历变量为
response:
{% for i in response %}
2. 请求URL格式错误
你实际使用的接口URL存在路径错误:注释的参考URL为#mylocalhosthere/pcp/customer/,实际生效的URL缺失了域名和路径之间的分隔符/,变成#mylocalhostherepcp/customer/?format=json,大概率会导致请求失败,无法拿到有效数据。同时要确认URL前缀是否添加了http://或https://,缺少协议头的话requests无法正常发起请求。
建议增加请求校验逻辑,提前排查请求异常:
os.environ['NO_PROXY'] = '#mylocalhosthere' def api_view(request): # 补全协议头、路径分隔符 url = 'http://#mylocalhosthere/pcp/customer/?format=json' try: r = requests.get(url, timeout=5) # 状态码非200时直接抛出异常 r.raise_for_status() # 用requests自带的json解析方法,更稳妥 data = r.json() # 控制台打印数据,确认数据结构正确 print("接口返回数据:", data) except Exception as e: print("接口请求失败:", e) data = [] return render(request,'PcPeripherals/api.html',{'data':data})
3. 数据结构不匹配
如果你用的是DRF的分页接口,返回的默认结构为{"count": xxx, "next": xxx, "previous": xxx, "results": [客户数据数组]},此时不能直接遍历根data,需要调整模板遍历对象为data.results:
{% for i in data.results %} <strong>{{i.id}}</strong> {% endfor %}
内容的提问来源于stack exchange,提问作者Sandreas
相关产品推荐
相关产品推荐

