2013-09-24 11 views
19

próbuję powrócić HTML poprzez Ajax rozmowy i mam następujący fragment kodu moim zdaniemWracając Przedstawiane Html poprzez Ajax

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

i mojego Ajax

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

i rzuca po błędzie

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 

co robię źle?

Odpowiedz

48

Istnieje kilka problemów z kodem:

trzeba użyć render_to_string.

Nie musisz też konwertować kodu HTML na json, ponieważ zastępujesz zawartość bezpośrednio.

Wyrażając to wszystko razem masz:

from django.template.loader import render_to_string 

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

w przedniej koniec, trzeba:

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

I zostały otrzymuję błąd, nic nie pokazał się na stronie za pośrednictwem AJAX, I wydrukowałem błąd z alertem jquery i widzę następujący komunikat "SyntaxError: Nieoczekiwany token <". Czy ajax nie rozpoznaje tagu otwierającego html? –

+0

NVM napotkałem błąd –

+1

Jeśli wywołanie AJAX zwraca HTML, to chodzi o użycie '$ ('# result'). Html (dane)' zamiast '$ ('# result') .text (data)' (zauważ ** '.html' ** zamiast' .text'). – Jabba

-1

Pierwszy argument RequestContext jest obiektem żądania.

Można dodać obiekt żądania lub skorzystać z klasy Kontekst.

-2

Pierwszy parametr RequestContext() powinny być request, więc linia zmiana w kodzie jako

html = t.render(RequestContext(request, {'dishes': dishes}) 
Powiązane problemy