オブジェクト リストを 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 のみが返されます。ハンディ!