6

該当するヘルプを受け取っていないため、この質問を何度もしています。

私の問題は、クエリ結果を ajax 応答としてテンプレートに返す方法がわからないことです。

これは私がしました:

if request.path == "/sort/":
    sortid = request.POST.get('sortid')
    locs = Location.objects.order_by(sortid)
    if request.is_ajax():
        return HttpResponse(locs,mimetype="application/json")

次に、私のajaxdone関数はこれを行います:

}).done(function(data){
$('.sortierennach').html(data);
});

今起こっていることは、のコンテンツを置き換えるだけで.sortierennach、django dicをレンダリングしていないため、これを行うことができます:

{% for loc in locs %}
  {{loc.name}}
{% endfor %}

誰か助けてください...どうもありがとう

4

2 に答える 2

4

オブジェクト リストを JSON ディクショナリにエクスポートする必要があります。

if request.path == "/sort/":
    sortid = request.POST.get('sortid')
    locs = Location.objects.order_by(sortid)
    if request.is_ajax():
        import json
        return HttpResponse(json.dumps(locs), mimetype="application/json")

ただし、そのためには、ある種のクライアント側テンプレート システムを使用する必要があります。

より良い方法は、Django のrender_to_responseショートカットを使用することです。実際には、JSON で応答する必要はありません。リクエストに文字列で応答するだけです。

私は通常、AJAX を利用したもの用に 2 つのテンプレートを作成します。1 つ目は部分的なテンプレートで、AJAX の更新中に更新したい特定の HTML のみが含まれています。2 つ目は、ビューが正常に呼び出されたときに使用できるラッパーです。

簡単な例です。これが私の object_list.html です。

<ul id='object-list'>
    {% for object in object_list %}
        <li>{{ object.value }}</li>
    {% endfor %}
</ul>

そして、これが私のbase.htmlです:

<html>
<title>Example</title>
    <body>
        {% include 'object_list.html' %}
    </body>
</html>

ビューについては、次のようにします。

from django.shortcuts import render_to_response
from django.template import RequestContext

from models import Location

def view(request):
    locs = Location.objects.order_by(sortid)
    if request.is_ajax():
        return render_to_response('object_list.html', {'object_list': locs}, context_instance=RequestContext(request))
    return render_to_response('base.html', {'object_list': locs}, context_instance=RequestContext(request))

これにより、標準の GET または XHTTP リクエストを介してビューを正常に呼び出すことができ、更新する部分的な HTML のみが返されます。ハンディ!

于 2013-02-27T07:11:00.373 に答える
1

最初にajax関数に値を入力しようとしている場合は、クエリセットオブジェクトを次のようなjsonオブジェクトに変換する必要があります

if request.path == "/sort/":
    sortid = request.POST.get('sortid')
    locs = Location.objects.order_by(sortid)
    if request.is_ajax():
        locs = json.dumps(locs)
        return HttpResponse(locs,mimetype="application/json")

これで、ajax コードで json data を受け取ります。

したがって、この locs データを使用することで、Ajax で HTML を生成することも、やりたいことを何でも実行することもできます。

于 2013-02-27T07:10:38.860 に答える