数据表下一步按钮不起作用

Posted

技术标签:

【中文标题】数据表下一步按钮不起作用【英文标题】:DataTables Next button not working 【发布时间】:2017-03-09 02:56:44 【问题描述】:

我在 html 网页中初始化了一个 DataTable,通过对 Django 后端的 ajax 调用分段呈现。

一切正常,但是 [Next] 和 [Last] 数据表按钮不起作用。分页工作正常, Prev 和 First 也工作正常。

数据表代码:

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 传递到 datatables 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')

分页工作正常,所有内容加载都没有错误。但是“下一个/最后一个”被模糊了,当我点击它们时,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 错误)(除了错误发生在哪个表之外,这不提供任何信息。

好的,所以我知道当单击下一个或最后一个时,数据表 API 提供的 r_start 值为 NaN。我通常可以通过手动设置范围来解决这个问题,但是我无法从 django 知道单击了哪个按钮(最后一个范围或下一个范围)而不做一些愚蠢的 jquery。

这个数据表几乎完全是从我程序的另一部分复制而来的,它工作正常,我只是更改了一些 python 代码以吐出一个不同的对象列表......所以我很困惑为什么这是破坏.

我想我的问题是,除了传递 NaN 之外,如何让数据表在“下一个”上发送更有用的值,为什么下一个/最后一个按钮会模糊?

【问题讨论】:

【参考方案1】:

除了recordsTotal,还需要返回recordsFiltered参数。

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

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

【讨论】:

我其实有这行代码,但是被注释掉了。但是,使这项工作起作用的是使用所有可能结果的总长度,而不仅仅是 result_list(它只包含整个查询集的一部分)。所以在这个例子中,我使用了 response_data['recordsFiltered'] = objects.count() 这很有效。所以这个答案大部分是正确的,如果你能把它改成 objects.count() 我可以接受。 @rob,我不懂 Python,但根据你的描述,我发现 recordsFiltered 不见了。 谢谢,你省了我几个小时的头痛!【参考方案2】:

Gryocode 的回答基本正确。

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

但是当取消注释时,这仍然不起作用。

我通过设置解决了这个问题

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

除非提供了搜索词,否则我会返回过滤对象查询集的长度。

【讨论】:

以上是关于数据表下一步按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Kivymd on_release 按钮​​使用 MDCard 进行下一步的操作不起作用

引导向导下一个按钮不起作用

除非经过开发人员工具检查,否则 jCarousel 下一个按钮不起作用

以编程方式继续不起作用

Actionscript 导航不起作用

在会话中发出后续 POST 请求不起作用 - 网络抓取