2016-07-12 2 views
1

У меня есть два разных запроса AJAX, которые я хочу объединить.Как передать HttpResponse и дополнительные данные через Ajax в Django

Первый получает некоторый 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 говорит, что он не сериализуем.

+0

Посмотрите по этому поводу -> https://docs.djangoproject.com/es/1.9/ref/request-response/# jsonresponse-objects – Gocht

+0

Я прочитал это, но я слишком много нуб, чтобы понять это ... – 43Tesseracts

ответ

1

Вы не можете сериализовать вывод Django's render, потому что он returns an HttpResponse object, а не строка (это то, что вы хотите, чтобы сериализовать ее).

Хорошим решением является вернуть HTML в веб-интерфейсе с помощью render_to_string:

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

Спасибо! Мне просто пришлось добавить запрос на render_to_string, и он сработал. – 43Tesseracts