Django新手求助:如何在单个JsonResponse返回两种不同响应类型?
Django 单JsonResponse返回多类型数据的问题修正
你的代码存在两个核心错误:
- JsonResponse参数使用错误:JsonResponse仅接受一个可序列化的字典作为第一个参数,你传入
data和count两个参数属于语法错误,会直接导致运行报错。 - 错误理解render函数的作用:
render(request, 'test.html', ...)返回的是完整的HttpResponse对象(包含HTML页面和响应头),无法被序列化为JSON格式。你需要的是返回记录总数这个数值,而非渲染整个模板的响应。
修正后的代码
from django.http import JsonResponse from django.shortcuts import render_to_string from django.forms.models import model_to_dict from .models import Record def article_filter_mobile(request): # 获取数据库记录总数 number_of_rec = Record.objects.count() # 查询所有记录并转换为字典列表 locations = Record.objects.raw("SELECT * FROM myDb") available_lessons = [model_to_dict(l) for l in locations] # 渲染表格HTML片段 html_table = render_to_string('grid_mobile.html', {'available_lessons': available_lessons}, request=request) # 将所有需要返回的数据整合到一个字典中 response_data = { 'number_of_rec': number_of_rec, 'html_table': html_table, # 可选:直接返回原始数据列表,方便前端JS直接处理 'available_lessons': available_lessons } # 返回统一的JsonResponse return JsonResponse(response_data)
前端使用说明
在test.html中通过AJAX请求该接口后:
- 从返回的JSON中提取
number_of_rec,直接插入到页面对应位置展示总数 - 将
html_table的内容插入到页面指定容器,grid_mobile.html中的JS可直接操作渲染后的DOM;若需要直接处理数据,可使用返回的available_lessons数组进行逻辑处理
内容的提问来源于stack exchange,提问作者Nico44044
相关产品推荐
相关产品推荐

