0

0

Django 视图中同时支持 JSON 响应与 HTML 渲染的正确实践

霞舞

霞舞

发布时间:2026-01-14 11:55:27

|

190人浏览过

|

来源于php中文网

原创

Django 视图中同时支持 JSON 响应与 HTML 渲染的正确实践

在 django 中,`jsonresponse` 仅返回纯 json 数据,无法渲染 html 模板;若需同一 url 同时支持 ajax 请求(返回 json)和直接访问(返回网页),应通过请求头(如 `accept`)动态判断并分别响应。

Django 的视图函数本质上是“单入口、多出口”的逻辑单元——它可以根据请求上下文灵活选择响应类型。关键在于区分请求意图前端通过 AJAX 发起的异步调用通常携带 Accept: application/json 头,而浏览器直接访问 URL 则默认发送 Accept: text/html,*/*。利用这一差异,即可实现“一址双用”。

以下是推荐的改进方案(兼容您现有代码结构):

from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator

@csrf_exempt  # 仅当未使用 CSRF Token 时临时添加(生产环境建议配合 {% csrf_token %})
def update_text(request):
    if request.method == "POST":
        text = request.POST.get("text", "").strip()

        # 判断请求是否期望 JSON 响应
        if request.accepts('application/json'):
            # 返回结构化 JSON,便于前端健壮处理
            return JsonResponse({"output": f"Processed: '{text}'"})
        else:
            # 非 AJAX 请求(如手动输入 URL),返回完整 HTML 页面
            return render(request, "realtime_input.html", {"initial_text": text})

    # GET 请求:直接渲染初始页面(推荐方式)
    return render(request, "realtime_input.html", {"initial_text": ""})

⚠️ 重要注意事项

萝卜简历
萝卜简历

免费在线AI简历制作工具,帮助求职者轻松完成简历制作。

下载
  • 不要移除 CSRF 保护:您的前端 AJAX 请求应包含 CSRF Token。在模板中添加 {% csrf_token %} 并在 JS 中读取 input[name=csrfmiddlewaretoken] 的值,或使用 django.middleware.csrf.get_token(request) 在上下文中传递。
  • safe=False 通常不必要:JsonResponse 默认要求字典类型;若传入字符串需 safe=False,但更佳实践是始终返回结构化字典(如 {"output": "..."}),提升可维护性与前端解析安全性。
  • HTML 模板需统一路径:确保 realtime_input.html 存放于正确 templates/ 目录下,并在 settings.py 中配置 TEMPLATES。
  • 避免混合响应逻辑:切勿在 JsonResponse 中尝试调用 render() —— 二者底层响应类不同(JsonResponse 继承自 HttpResponse,但设置 content_type="application/json"),强行混用将导致异常或不可预测行为。

总结:Django 的优雅之处正在于其请求/响应的可塑性。通过 request.accepts() 精准识别客户端意图,配合合理的视图分发逻辑,即可在单一 URL 上无缝支撑实时交互(AJAX+JSON)与传统页面导航(HTML+render),无需拆分路由或牺牲用户体验。

立即学习前端免费学习笔记(深入)”;

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

149

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

159

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

110

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.09.24

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.6万人学习

CSS教程
CSS教程

共754课时 | 18.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号