我在HTML网页中初始化了一个DataTable,通过对Django后端的ajax调用进行分段渲染。
一切都很好,但是,[Next]和[Last]数据表按钮不起作用。分页工作正常,Prev和First也很好。
DataTable代码:
var object_table = $('#object_table').DataTable( {
"sDom": '<"H"lfr>t<ip>',
"sPaginationType": "full_numbers",
"iOverlayFade": 100,
"processing": true,
"serverSide": true,
"ajax": '/objects/object_list/',
"deferRender": true
"aoColumnDefs": [ { "aTargets": [ 0 ], "sWidth": "1%",
"searchable":false, "orderable":false, }
],
"columns": function ( row, data, index ) {... }]
});
这就是代码看起来像是从django传递到数据表ajax调用
def dt_object_list_loader:
r_sequence = int(request.GET.get('draw', 0))
r_length = int(request.GET.get('length', 10))
r_start = int(request.GET.get('start', 0))
objects = djangomodel.objects.filter(...)
result_list = [objects[r_start:r_start + r_length]
response_data = {}
response_data['recordsTotal'] = len(result_list)
response_data['draw'] = int(request.GET.get('draw', 0))
response_data['data'] = result_list
return HttpResponse(jsonpickle.encode(response_data), content_type='application/json')
分页工作正常,一切都没有错误加载。但是&#39; next / last&#39;模糊了,当我点击它们时,django会触发错误:
Internal Server Error: /home/task_list/
Traceback (most recent call last):
....
r_start = int(request.GET.get('start', 0))
ValueError: invalid literal for int() with base 10: 'NaN'
当python错误抛出时,DataTables也会触发一个神秘的错误7(一般的ajax错误)(除了发生错误的表之外,它没有提供任何内容。
好的,所以我知道当点击下一个或最后一个时,datatables API提供的r_start值是NaN。我通常可以通过手动设置范围来解决这个问题,但我无法从django知道哪个按钮被点击了(范围是最后一个或范围为下一个)而没有做一些inane jquery。
这个数据表几乎完全从我程序的另一部分复制而且工作正常,我只是改变了一些python代码来吐出一个不同的对象列表......所以我很困惑为什么这个正在破产。
我想我的问题是,如何让数据表在&#39; next&#39;上发送更有用的价值?除了通过NaN,为什么下一个/最后一个按钮模糊了?
答案 0 :(得分:2)
除了recordsFiltered
之外,您还需要返回recordsTotal
参数。
response_data['recordsTotal'] = objects.count()
response_data['recordsFiltered'] = objects.count()
由于您未执行搜索recordsFiltered
,参数值应等于recordsTotal
。
答案 1 :(得分:1)
Gryocode的回答大多是正确的。
我已经评论过了 response_data ['recordsFiltered'] = len(result_list)
但是当没有注释时,这仍然无效。
我通过设置
来解决这个问题response_data['recordsFiltered'] = objects.count()
除非提供了搜索词,否则我返回了过滤对象查询集的长度。