2016-07-12 11 views
1

私は結合したい2つの異なるAJAXリクエストを持っています。DjangoでAjax経由でHttpResponseと追加データを渡す方法

最初のものは、いくつかの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の結果を2番目のビューのデータに追加しようとしましたが、json.dumpsはそれがシリアライズ可能ではないことを示しています。

+0

これ以上見てください - > https://docs.djangoproject.com/es/1.9/ref/request-response /#jsonresponse-objects – Gocht

+0

私はそれを読んだことがありましたが、私はそれを理解するにはあまりにも多くのnoobです。 – 43Tesseracts

答えて

1

Djangoのrenderの出力は、returns an HttpResponse objectであるため、シリアル化できません。これは、シリアル化できるようにする文字列ではありません。

良い解決策はrender_to_stringを使用してフロントエンドにあなたのHTMLを返すことです:

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

ありがとう! render_to_stringにリクエストを追加するだけで、うまくいきました。 – 43Tesseracts

関連する問題