20

我正在尝试通过 Ajax 调用返回 html,并且在我的视图中有以下代码片段

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

和我的阿贾克斯

  $.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

我究竟做错了什么?

4

3 回答 3

62

您的代码存在一些问题:

你需要使用render_to_string.

您也不需要将 HTML 转换为 json,因为您直接替换内容。

将所有这些放在一起,您将拥有:

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)

在您的前端,您需要:

$.ajax({
        type: "POST",
        url: "/filter_home", 
        data: {'name': 'me', 'csrfmiddlewaretoken': '{{ csrf_token }}'},
        success : function(data) {
             $('.row.replace').html(data);
         }
});
于 2013-09-24T08:26:10.140 回答
0

RequestContext 的第一个参数是一个请求对象。

您可以添加请求对象或改用 Context 类。

于 2013-09-24T08:23:26.847 回答
-1

第一个参数RequestContext()应该是request,因此将代码中的行更新为

html = t.render(RequestContext(request, {'dishes': dishes})
于 2013-09-24T08:24:08.133 回答