您需要將您的對象列表導出到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驅動的東西創建兩個模板。第一個是部分模板,它只包含我想在AJAX更新期間更新的HTML特定位。第二個是一個包裝器,可以在正常調用視圖時使用。
一個廉價的例子,這是我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更新。便利!
對於這種類型的排序功能,您應該真正使用GET方法,而不是POST,因爲您不會更改服務器上的任何內容,所以將來您可以附加ETag或類似緩存響應。 – LtWorf 2013-02-27 07:32:38