您需要将对象列表导出到 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。便利!