Django循环API数据存入列表格式不符,求修正方案
解决方法
你原代码存在两个核心问题:
- 未实际发起API请求,仅将URL字符串赋值给
get_response变量,需要用requests库发送GET请求 - 错误地将每个数据项单独包装为带
results键的对象存入列表,还把长度字段塞进列表,导致返回格式不符合预期
修正后的views.py代码如下:
import requests from django.http import JsonResponse def extract_view(request): # 初始化最终返回结构,默认结果为空数组、长度为0 response_data = { "results": [], "length_of_results": 0 } try: # 实际发起API请求 get_response = requests.get("https://api.punkapi.com/v2/beers") if get_response.status_code == 200: # 将API返回的JSON数组直接存入results字段 response_data["results"] = get_response.json() # 计算结果集长度 response_data["length_of_results"] = len(response_data["results"]) except requests.exceptions.RequestException: # 捕获请求异常,避免程序崩溃 pass return JsonResponse({"data": response_data})
关键修改说明:
- 用
requests.get()发起真实API请求,替换原代码中直接赋值URL的错误操作 - 改用字典
response_data构建目标格式:- 直接将API返回的所有数据存入
results数组 - 基于
results数组的实际长度设置length_of_results字段
- 直接将API返回的所有数据存入
- 增加异常处理,应对网络错误、API不可用等异常情况
修正后返回的格式将与你期望的一致:
{"data": {"results": [{"id": 544,"name": "User_1"},{"id": 218,"name": "User_2"},...], "length_of_results": 25}}
内容的提问来源于stack exchange,提问作者rat4090
相关产品推荐
相关产品推荐

