2013-09-24 18 views
19

sto cercando di tornare html tramite e Ajax chiamata e ho il seguente frammento di codice a mio avvisoTornando rendering Html tramite Ajax

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

e il mio Ajax

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

e getta la seguente errore

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 

cosa sto facendo di sbagliato?

risposta

48

ci sono alcuni problemi con il tuo codice:

È necessario utilizzare render_to_string.

Inoltre, non è necessario convertire il codice HTML in JSON perché si stanno sostituendo i contenuti direttamente.

Mettendo insieme tutto questo si dispone di:

from django.template.loader import render_to_string 

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

Nel vostro front-end, è necessario scaricare:

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

Sono stato sempre un errore, nulla è mostrato sulla pagina tramite la tecnologia AJAX, ho stampato l'errore con un avviso jQuery e vedo il seguente messaggio "SyntaxError: Unexpected token <". Ajax non riconosce il tag di apertura html? –

+0

NVM ho rilevato l'errore –

+1

Se la chiamata AJAX restituisce HTML, il trucco è usare '$ ('# result'). Html (data)' invece di '$ ('# result'). Testo (dati)' (avviso ** '.html' ** invece di' .text'). – Jabba

-1

Il primo argomento di RequestContext è un oggetto richiesta.

È possibile aggiungere l'oggetto richiesta o utilizzare invece la classe Contesto.

-2

primo parametro da RequestContext() dovrebbe essere request, in modo da linea di aggiornamento nel codice come

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