Skip to main content
 首页 » 编程设计

python之如何在 Django 中通过 Ajax 传递 HttpResponse 和附加数据

2025年04月02日33arxive

我有两个不同的 AJAX 请求要合并。

第一个得到一些 html:

def ajax_get_html(request): 
    if request.is_ajax() and request.method == "POST": 
        context = { 
            ... 
        } 
        return render(request,"my_app/my_template.html", context) 
    else: 
        raise Http404 

像这样使用:

    $.ajax({ 
      type: "POST", 
      url: ajax_url, 
      data: { 
        csrfmiddlewaretoken: "{{ csrf_token }}", 
      }, 
      success: function(data){ 
        $(my_div).html(data); 
      } 
    }); 

我的第二个获取一些数据:

def ajax_get_data(request): 
    if request.is_ajax() and request.method == "POST": 
        data = { 
            "answer": 42, 
        } 
        json_data = json.dumps(data) 
        return HttpResponse(json_data, content_type='application/json') 
    else: 
        raise Http404 

像这样使用:

$.ajax({ 
    type: "POST", 
    url: another_ajax_url, 
    data: { 
      csrfmiddlewaretoken: "{{ csrf_token }}", 
    }, 
    success: function(data){ 
      var answer = data.answer; 
      $("#notification_badge").html(answer); 
    } 
  }); 

如何将这些组合到同一个请求中?我尝试将 render 的结果添加到第二个 View 中的数据,但 json.dumps 说它不可序列化。

请您参考如下方法:

你不能序列化 Django 的 render 的输出,因为它 returns an HttpResponse object ,而不是字符串(这是您希望能够对其进行序列化的内容)。

一个好的解决方案是使用 render_to_string 将您的 html 返回到前端:

... 
data = { 
    "answer": 42, 
    "html": render_to_string("my_app/my_template.html", context) 
} 
...