首页 文章

DataTables下一步按钮不起作用

提问于
浏览
1

我有一个在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 ) {... }] 
});

这就是代码在数据表ajax调用时从django传递的内容

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')

分页工作正常,一切都加载没有错误 . 但是“下一个/最后一个”被模糊了,当我点击它们时,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代码来吐出一个不同的对象列表...所以我很困惑为什么这是破坏 .

我想我的问题是,除了传递NaN之外,我怎样才能使数据表在'next'上发送更有用的值?为什么下一个/最后一个按钮模糊了?

2 回答

  • 2

    除了 recordsTotal 之外,还需要返回 recordsFiltered 参数 .

    response_data['recordsTotal'] = objects.count()
    response_data['recordsFiltered'] = objects.count()
    

    由于您没有执行搜索 recordsFiltered 参数值应该等于 recordsTotal .

  • 1

    Gryocode的回答大多是正确的 .

    我已经注释掉了response_data ['recordsFiltered'] = len(result_list)

    但是当没有注释时,这仍然无效 .

    我通过设置修复了这个

    response_data['recordsFiltered'] = objects.count()
    

    除非提供了搜索术语,否则我返回过滤对象查询集的长度 .

相关问题