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 に答える