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

Django项目中AJAX调用views.py未返回预期数据,返回整页HTML如何解决?

问题根因
  • 你在视图中使用的render方法的作用是渲染完整的HTML模板并返回整个页面内容,该返回方式仅适用于普通页面跳转请求,不符合AJAX异步获取数据的需求,这就是控制台打印出完整HTML代码的核心原因。
修复步骤
  1. 修改views.py返回逻辑
    首先导入Django的JSON响应类,在视图中区分普通页面请求和AJAX请求,分别返回对应内容:
# 顶部导入依赖
from django.http import JsonResponse

# 你的视图函数内部逻辑
# 先完成业务逻辑得到shuffled_list
if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest':
    # 将模型列表转换为可JSON序列化的结构,根据你的实际需求取对应字段
    serialized_list = list(shuffled_list.values('id', 'username', 'card_content' /* 其他你需要返回的字段 */))
    return JsonResponse({'duo_filter': serialized_list})
# 普通页面访问仍然走原有渲染逻辑
return render(request, 'cards.html', {'duo_filter': shuffled_list})
  1. 可选优化AJAX请求配置
    明确指定预期返回的数据格式为JSON,避免前端解析异常:
$('#accept').on('click', function() {
    var accept_value = $('#accept').val();
    $.ajax({
      url: '/cards/',
      type: 'POST',
      data: {'duo_status': accept_value},
      headers: { "X-CSRFToken": "{{ csrf_token }}" },
      dataType: 'json', // 新增该行声明返回格式
      success: function(data) {
        console.log('Accepted: success')
        console.log(data.duo_filter) // 此处可直接拿到你需要的列表数据
        // 后续自行编写逻辑将数据渲染到页面卡片区域即可
      }
    })
})
注意事项
  • 如果shuffled_list中包含无法直接JSON序列化的字段(如日期类型、外键对象、文件字段等),需要手动将其转换为字符串/字典等可序列化格式后再放入返回列表。
  • 原有页面刷新的访问逻辑不会受到影响,只有AJAX异步请求会返回JSON格式数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:27:04