Django 上的数据表、服务器端和分页
DataTables, serverSide and pagination on Django
我将数据表与 serverSide render 一起使用。
<script>
$(document).ready( function () {
$('#myTable').DataTable({
"processing": true,
"serverSide": true,
"ajax": "{% url 'core:persons_json' %}",
"columns": [
{"data": "full_name"},
{"data": "email"},
]
});
});
</script>
在我的 views.py 我有:
def persons_json(request):
persons = Person.objects.all()
data = [item.to_dict_json() for item in persons]
page = 1
per_page = 10
res = {
'data': data,
'page': page,
'per_page': per_page,
'total': math.ceil(persons.count() / per_page)
}
return JsonResponse(res)
但他仍然return所有的人。而且我想避免加载大量数据。
但是当我定义时,例如:
def persons_json(request):
length = int(request.GET.get('length'))
persons = Person.objects.all()[:length]
data = [item.to_dict_json() for item in persons]
page = 1
per_page = 10
res = {
'data': data,
'page': page,
'per_page': per_page,
'total': math.ceil(persons.count() / per_page)
}
return JsonResponse(res)
length = int(request.GET.get('length'))
是服务器端发送的参数:
http://localhost:8000/person/json/?draw=1&columns%5B0%5D%5Bdata%5D=full_name&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=true&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=email&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=0&order%5B0%5D%5Bdir%5D=asc&start=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1568072064631
注意我们有:start=0&length=10
.
我的问题如下:当我使用第二个选项时。其他item的分页没有出现在DataTables中,即
我想要它
但是只出现一页
有谁知道我如何 return 所有页面,然后我点击每个页面来推进页面?
我决定。 DataTable 发送开始和长度。 API 需要 return 个 recordsTotal 和 recordsFiltered。
https://github.com/rg3915/django-datatables-experiment/issues/1
我将数据表与 serverSide render 一起使用。
<script>
$(document).ready( function () {
$('#myTable').DataTable({
"processing": true,
"serverSide": true,
"ajax": "{% url 'core:persons_json' %}",
"columns": [
{"data": "full_name"},
{"data": "email"},
]
});
});
</script>
在我的 views.py 我有:
def persons_json(request):
persons = Person.objects.all()
data = [item.to_dict_json() for item in persons]
page = 1
per_page = 10
res = {
'data': data,
'page': page,
'per_page': per_page,
'total': math.ceil(persons.count() / per_page)
}
return JsonResponse(res)
但他仍然return所有的人。而且我想避免加载大量数据。
但是当我定义时,例如:
def persons_json(request):
length = int(request.GET.get('length'))
persons = Person.objects.all()[:length]
data = [item.to_dict_json() for item in persons]
page = 1
per_page = 10
res = {
'data': data,
'page': page,
'per_page': per_page,
'total': math.ceil(persons.count() / per_page)
}
return JsonResponse(res)
length = int(request.GET.get('length'))
是服务器端发送的参数:
http://localhost:8000/person/json/?draw=1&columns%5B0%5D%5Bdata%5D=full_name&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=true&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=email&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=0&order%5B0%5D%5Bdir%5D=asc&start=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1568072064631
注意我们有:start=0&length=10
.
我的问题如下:当我使用第二个选项时。其他item的分页没有出现在DataTables中,即
我想要它
但是只出现一页
有谁知道我如何 return 所有页面,然后我点击每个页面来推进页面?
我决定。 DataTable 发送开始和长度。 API 需要 return 个 recordsTotal 和 recordsFiltered。
https://github.com/rg3915/django-datatables-experiment/issues/1