2013-09-24 6 views
19

Ich versuche, html über und Ajax-Aufruf zurück und ich habe den folgenden Code-Snippet aus meiner SichtReturning Rendered Html über Ajax

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

und meine Ajax

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

und es wirft die Folgefehler

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 

was mache ich falsch?

Antwort

48

Es gibt ein paar Probleme mit dem Code:

Sie müssen render_to_string verwenden.

Sie müssen Ihren HTML-Code auch nicht in json konvertieren, da Sie den Inhalt direkt ersetzen.

Putting dies alles zusammen Sie haben:

from django.template.loader import render_to_string 

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

In Ihrem Frontend benötigen Sie:

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

Ich habe einen Fehler wurde immer, nichts auf der Seite über Ajax auftauchten hat, ich habe den Fehler mit einer jquery-Warnung ausgegeben und sehe folgende Meldung "SyntaxError: Unexpected token <". Erkennt Ajax das HTML-Eröffnungs-Tag nicht? –

+0

NVM Ich fing den Fehler –

+1

Wenn der AJAX-Aufruf HTML zurückgibt, ist der Trick, $ ('# Ergebnis') zu verwenden. HTML (Daten) 'anstelle von' $ ('# Ergebnis'). Text (Daten) '(bemerke ** '.html' ** anstelle von' .text'). – Jabba

-1

Das erste Argument von RequestContext ist ein Anforderungsobjekt.

Sie könnten entweder das Anforderungsobjekt hinzufügen oder stattdessen die Context-Klasse verwenden.

-2

erste Parameter RequestContext() sollten request sein, so Update Zeile im Code als

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