Подтвердить что ты не робот

Возвращение визуализированного HTML-кода через Ajax

Я пытаюсь вернуть html через и Ajax-вызов, и у меня есть следующий фрагмент кода в моем представлении

if request.is_ajax(): 
t = loader.get_template('frontend/scroll.html')
html = t.render(RequestContext({'dishes': dishes})
return HttpResponse(json.dumps({'html': html}))

и мой Ajax

  $.ajax({
           type: "POST",
           url: "/filter_home", 
           data: {'name': 'me', 'csrfmiddlewaretoken': '{{csrf_token}}'},
           success : function(data) {
                $('.row.replace').html(data);
            }
   });

и это вызывает следующую ошибку:

Exception Value:    'dict' object has no attribute 'META'
Exception Location: /opt/bitnami/apps/django/lib/python2.7/sitepackages/django/core/context_processors.py in debug, line 39

что я делаю неправильно?

4b9b3361

Ответ 1

Есть несколько проблем с вашим кодом:

Вам нужно использовать render_to_string.

Вам также не нужно конвертировать HTML в json, поскольку вы заменяете содержимое напрямую.

Собрав все это вместе, вы получите:

from django.template.loader import render_to_string
from django.http import HttpResponse

if request.is_ajax():
    html = render_to_string('frontend/scroll.html', {'dishes': dishes})
    return HttpResponse(html)

В вашем интерфейсе вам нужно:

$.ajax({
        type: "POST",
        url: "/filter_home", 
        data: {'name': 'me', 'csrfmiddlewaretoken': '{{ csrf_token }}'},
        success : function(data) {
             $('.row.replace').html(data);
         }
});

Ответ 2

Первым аргументом RequestContext является объект запроса.

Вы можете либо добавить объект запроса, либо использовать класс Context.

Ответ 3

Первый параметр RequestContext() должен быть request, поэтому строка обновления в вашем коде как

html = t.render(RequestContext(request, {'dishes': dishes})