我正在尝试序列化Django查询集,将结果返回到URL,并将DataTable指向结果URL。当通过DOM从Django将数千行加载到DataTable中时,出现了这种潜在的解决方案来解决性能降低的问题。
我有一个观点:
from django.http import HttpResponse
from django.core import serializers
def json_ouput(request):
objects= MyModel.objects.all()
json = serializers.serialize('json', objects)
return HttpResponse(json, content_type='application/json')
视图连接到以下URL:
url(r'^home/json_ouput/$', views.json_ouput, name='json_ouput_url',),
我的模板指向此URL作为DataTable的AJAX源:
<table id="example">
<thead>
<tr>
<th>Description</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
</table>
<script defer type="text/javascript" language="javascript" class="init">
$(document).ready(function() {
$('#example').dataTable( {
"processing": true,
"ajax": {
"processing": true,
"url": "{% url 'json_output_url' %}",
"dataSrc":''
},
"scrollY": 800,
"deferRender": true,
"scroller": true,
"columns": [
{ "data": "fields.description" },
{ "data": "pk" }
]
});
});
</script>
约40秒后显示9,000行的结果。这是通过DOM(未序列化为JSON)且没有DataTables Scroller加载数据时发生的性能相同。我的理解是,Scroller不会加载所有数据,但是它似乎一次加载所有数据(即,所有9,000行都在DOM中,然后显示数据)。
如何在滚动表时获取DataTables来逐个加载数据?还是我可以在Django方面做一些事情来首先对数据进行分页?