如何使数据表根据需要从Django加载AJAX数据

时间:2019-04-03 17:42:01

标签: javascript ajax django datatables

我正在尝试序列化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方面做一些事情来首先对数据进行分页?

0 个答案:

没有答案