大量数据,DataTables使时间变得糟糕

时间:2018-05-23 18:36:45

标签: ajax django python-3.x datatables

我有一个视图,显示一组大约3000多条记录的数据(多个对象组合成一个QuerySet。结果使用DataTables渲染到一个表中,但渲染时间很糟糕 - 至少15秒。

我深入研究了DataTables并发现了deferRender API选项以及AJAX之类的东西。因为我之前从未使用它,所以我想就如何处理我的具体情况寻求指导。以下是带有DataTables的views.py和模板。

views.py:

def index(request):
    clients = Client.objects.all().prefetch_related('loan_set', 'loan_set__case_set')
    return render(request, 'app/index.html',
                  {'clients': clients})

的index.html:

            <table id="case_list" class="display">
                <thead>
                <tr>
                    <td>Imię i nazwisko</td>
                    <td>Edycja</td>
                </tr>
                </thead>
                <tbody>
                {% for c in clients %}
                <tr>
                    <td>{{ c.firstName }}&nbsp;{{ c.lastName }}</td>
                    {% if c.editLock %}
                    <td><i class="fas fa-lock fa-lg" style="color:Red" title="W edycji przez:&nbsp;{{ c.lockedBy }}"></i>&nbsp;{{ c.lockedBy }}</td>
                    {% else %}
                    <form method="post">
                        {% csrf_token %}
                        <td><a href="/edit/{{ c.pk }}" name="c_id"><i class="fas fa-pen-square fa-2x" style="color:green"></i></a></td>                            
                    </form>    
                    {% endif %}
                </tr>
                {% endfor %}
                </tbody>
            </table>

<script type="text/javascript">
    $(document).ready(function(){
    $('#case_list').DataTable( {
        deferRender: true
    }
    );
});
</script>

1 个答案:

答案 0 :(得分:1)

查看datatables的文档。

    $('#case_list').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": "{yourdata_url}"
    } );

在您的视图中,您必须以json格式发送数据。请注意,您需要在视图中使用逻辑进行搜索等。

我还会研究django-datatable-view包。