如何在Django中通过Ajax传递HttpResponse和其他数据

时间:2016-07-12 19:25:17

标签: python json ajax django django-views

我想要合并两个不同的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的结果添加到第二个视图中的数据,但json.dumps表示它不可序列化。

1 个答案:

答案 0 :(得分:1)

您无法序列化Django render的输出,因为它是returns an HttpResponse object,而不是字符串(这是您希望能够序列化它)。

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

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