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

Django不使用DRF如何将Python对象转换为标准JSON返回前端页面

问题原因
  • 你遇到的context must be a dict rather than JsonResponse报错,是因为JsonResponse是Django封装的用于直接返回JSON接口响应的对象,不能放入render方法的上下文参数中,上下文仅支持传入普通Python对象供模板渲染使用。你当前贴出的代码是直接传入了原数据data到上下文,不会触发该报错,应该是此前尝试把JsonResponse实例a放入上下文才导致的报错。
  • Python原生的布尔值True/False、空值None直接传入模板渲染时,会按Python语法格式输出,不会自动转换为JSON标准要求的true/false、null格式。
解决方案

无需引入DRF,直接使用Python内置的json模块完成序列化即可:

视图代码修改

from django.shortcuts import render
import json

def send_json(request):
    data = [{'name': 'Peter', 'email': 'peter@example.org'},
            {'name': 'Julia', 'email': 'julia@example.org'},
            {'name': True, 'data': None}]
    # 将Python对象序列化为符合JSON标准的字符串
    json_data = json.dumps(data)
    return render(request, 'index.html', {'a': json_data})

模板使用方法

  • 若仅需要文本展示JSON内容,直接使用{{ a }}输出即可,此时输出内容已经是标准JSON格式,True会转换为true、None会转换为null。
  • 若需要将JSON赋值给JavaScript变量使用,需要加上safe过滤器关闭Django的自动转义,避免引号等特殊字符被转义导致语法错误:
<script>
// 直接解析为JS对象即可使用
const pageData = {{ a|safe }};
console.log(pageData);
</script>

补充说明

如果你不需要渲染HTML页面,仅需要提供纯JSON接口,才需要使用JsonResponse,用法如下:

from django.http import JsonResponse

def json_api(request):
    data = [{'name': 'Peter', 'email': 'peter@example.org'}]
    # 顶层数据为非字典类型时需要加safe=False参数
    return JsonResponse(data, safe=False)

内容的提问来源于stack exchange,提问作者Krishna Manohar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:03