使用python REST API的数据表服务器端分页无法正常工作

时间:2020-01-10 13:09:21

标签: python jquery json ajax datatables

我正在尝试对我的jquery数据表实施serverSide处理,这就是我从API发送回来的内容:

{
  "data": {
    "Data": [
      { 
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3768, 
      }, 
      {
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3769,
      }, 
      {
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3770, 
      }
     ], 
    "recordsFiltered": 166, 
    "recordsTotal": 166
  }
}

可以看到,这里涉及嵌套。现在,我尝试使用以下方式呈现数据表:

results_table = $('#results_table').DataTable({
                    processing: true,
                    serverSide: true,
                    ajax: {
                        url: `/api/v1/projects/results`,
                        dataSrc: function(json){
                                data = json.data.Data
                                recordsTotal = json.data.recordsTotal
                                recordsFiltered = json.data.recordsFiltered
                                return data;
                        }
                    },
                    columns: columns,
                    initComplete: tableInitComplete
                });
            }); 

上面的代码只是我试图以某种方式使'recordsTotal'和'recordsFiltered'开始工作的原因。我知道我在搞砸。结果,在我的网页上,虽然我可以看到数据表中的行已正确呈现,但是分页却遇到了一个问题:我的页面不显示提取了多少记录,并说“显示0到0,共0”条目(从NaN个总条目中筛选出)”等等,我的数据表未呈现固定数量的页码。相反,我得到类似

[1]->[2]->[3]...[]

如果我直接单击最后一个未编号的页面,则会收到错误消息。如果我逐页显示,则中间有无数页。

我该如何解决?是否修改从AP发送的数据的嵌套结构?这是我创建从API发送的数据的方法:

results =  [row._asdict() for row in results]
result = {
            "Data": results,
            "recordsTotal" : 166,
            "recordsFiltered" : 166
        }

我不知道如何以正确的格式打包数据,而不是

{
  "recordsTotal" : 166,
  "recordsFiltered" : 166
   "data" : [
      {...}.
      {...}
    ]
}

我最终有

{
   "data": {
   "data" : [
      {...}.
      {...}
    ],
  "recordsTotal" : 166,
  "recordsFiltered" : 166
}
}

如果我不想修改从API返回的数据,我该如何访问'recordsTotal'和'recordsFiltered'并使用它们消除我面临的问题?谢谢。

1 个答案:

答案 0 :(得分:0)

您的JSON需要以这种格式返回。

示例JSON

{
  "draw": 1,
  "recordsTotal": 57,
  "recordsFiltered": 57,
  "data": [
    { 
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3768, 
    }
  ]
}

此外,您无需编写dataSrc,因为Datatable会自动处理这些变量。

关于无限页面数。这是因为您的参数没有正确设置或返回。

您可以阅读更多详细信息here并查看live demo。您可以检查请求,以查看请求中传递了什么以及响应中返回了什么。

相应地映射字段,它应该可以正常工作。

相关问题