所以我用 django 服务器端处理实现了 dataTables 插件。看起来有点像这样:
模板:
<script type="text/javascript">
$(document).ready(function() {
$('#example').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "/datatable/"
} );
} );
</script>
意见:
def main_view(request):
return render_to_response('index.html')
def datatables_view(request):
start = request.GET['iDisplayStart']
length = request.GET['iDisplayLength']
query = myUser.objects.all()
total = query.count()
if request.GET.has_key('sSearch'):
# filtering...
query = query[start:start+length]
response = {"aaData": [(q.name, q.state, q.email) for q in query],
"iTotalRecords": total,
...additional params for dataTable... }
然后我使用 json.dump 序列化数据并像这样发送
s = json.dump(response)
return HttpResponse(s.read())
这可能有点错误,但那是因为我没有使用我的实际代码,而是从内存中写下来。如果这里有任何错误并不重要,只要知道这是一般的想法......(另外,我使用 json 因为我在不推荐使用 simplejson 的 django 1.5 上运行它)。
所以就像我说的,这很好用。该页面的 url 与 main_view 一起使用,并且数据表将其 ajax 调用发送到 datatables_view 并且一切都在滴答作响。现在我想从服务器(而不是服务器)发送一些额外的数据。如,我想添加一些要在模板中使用的数据。该数据必须来自 datatables_view,因为它依赖于当前查询并且应该是动态的。假设我将其添加到响应中:
response = {"aaData": [(q.name, q.state, q.email) for q in query],
"iTotalRecords": total,
...additional params for dataTable...,
"sMeow": query.filter(name='cat')[:20]}
这显然是一个示例,但重点是当您更改查询时(例如您按搜索词过滤或更改排序),那么 sMeow 也会更改。然后我想在模板上以某种方式访问它。显然我不能这样做:
{{ sMeow }}
但我也不能使用parseJSON,因为这不是文档接收的东西,而是数据表接收的东西,我需要使用 API 来访问它,尽管我找不到如何做到这一点。
因为最终我有一个按钮可以在 sMeow 值上运行一些脚本(并将其发送到不同的请求),所以我查看了 tabletools 插件,但它在服务器端并不能很好地发挥作用(“TableTools 更多专注于客户端”来源)。
尽管我宁愿使用数据表的默认功能,但我并不羞于使用其他插件。任何帮助,将不胜感激!