2013-09-24 3 views
19

Я пытаюсь вернуться 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 

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

ответ

48

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

Вы должны использовать render_to_string.

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

Собираем все это вместе у вас есть:

from django.template.loader import render_to_string 

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); 
     } 
}); 
+0

Я получаю сообщение об ошибке, ничего не появилось на странице с помощью Ajax, я напечатал ошибку с предупреждением jquery, и я вижу следующее сообщение «SyntaxError: Неожиданный токен <». Является ли ajax не распознающим тег открытия html? –

+0

NVM я поймал ошибку –

+1

Если вызов AJAX возвращает HTML, трюк заключается в использовании '$ ('# result') .html (data)' вместо '$ ('# result'). Text (data)' (обратите внимание на ** .html' ** вместо '.text'). – Jabba

-1

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

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

-2

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

html = t.render(RequestContext(request, {'dishes': dishes}) 
Смежные вопросы