首页 > 解决方案 > 大量数据,DataTables 渲染时间很糟糕

问题描述

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

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

视图.py:

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

索引.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>

标签: ajaxdjangopython-3.xdatatables

解决方案


查看datatables的文档。

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

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

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


推荐阅读