Возвращение визуализированного 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
что я делаю неправильно?
Ответы
Ответ 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})