You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django新手求助:如何在单个JsonResponse返回两种不同响应类型?

Django 单JsonResponse返回多类型数据的问题修正

你的代码存在两个核心错误:

  1. JsonResponse参数使用错误:JsonResponse仅接受一个可序列化的字典作为第一个参数,你传入data和count两个参数属于语法错误,会直接导致运行报错。
  2. 错误理解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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:57:44