Reputation: 329
I am trying to return html via and Ajax call and I have the following snippet of code in my view
if request.is_ajax():
t = loader.get_template('frontend/scroll.html')
html = t.render(RequestContext({'dishes': dishes})
return HttpResponse(json.dumps({'html': html}))
and my Ajax
$.ajax({
type: "POST",
url: "/filter_home",
data: {'name': 'me', 'csrfmiddlewaretoken': '{{csrf_token}}'},
success : function(data) {
$('.row.replace').html(data);
}
});
and it throws the following error
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
what am I doing wrong?
Upvotes: 22
Views: 27195
Reputation: 174614
There are a few issues with your code:
You need to use render_to_string
.
You also don't need to convert your HTML into json because you are replacing the contents directly.
Putting all this together you have:
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)
In your front end, you need:
$.ajax({
type: "POST",
url: "/filter_home",
data: {'name': 'me', 'csrfmiddlewaretoken': '{{ csrf_token }}'},
success : function(data) {
$('.row.replace').html(data);
}
});
Upvotes: 67
Reputation: 53316
First parameter to RequestContext()
should be request
, so update line in your code as
html = t.render(RequestContext(request, {'dishes': dishes})
Upvotes: -1
Reputation: 1286
The first argument of RequestContext is a request object.
You could either add the request object or use the Context class instead.
Upvotes: 0