分页导航 的两种实现方式 🆚
分页导航的实现方式有两种
一、使用 DataTables.js 插件来实现表格的搜索、排序和分页功能。分页导航是由 DataTables 动态生成的,并且通过自定义 CSS 进行了美化。
客户端分页:页面使用 JavaScript 插件 DataTables.js。
工作方式:后端一次性将所有用户或部门数据发送到前端模板,然后由 DataTables.js 在浏览器中进行处理,包括分页、搜索和排序。
模板代码:模板中,看不到类似 {% raw %}{% if is_paginated %}{% endraw %} 的分页代码块,因为分页导航是由 JavaScript 动态生成的。
需要引入
<link rel="stylesheet" href="https://cdn.datatables.net/2.0.8/css/dataTables.bootstrap5.min.css">
<script src="https://cdn.datatables.net/2.0.8/js/dataTables.bootstrap5.min.js"></script>
二、使用 Django 内置的、传统的服务器端分页 (Paginator)。
工作方式:后端视图(PositionListView)对数据进行分页处理,每次只将当前页的数据传递给模板。翻页时,浏览器会向服务器发起新的请求以获取下一页的数据。
模板代码:这个文件中有明确的 Django 分页模板代码:
{% if is_paginated %}
<nav aria-label="Page navigation">
<ul class="pagination justify-content-center">
...
</ul>
</nav>
{% endif %}
优缺点对比
| 特性 | 用户管理 / 部门管理 (DataTables.js) | 职位管理 (Django Paginator) |
|---|---|---|
| 实现方式 | 客户端 (JavaScript) | 服务器端 (Python) |
| 数据加载 | 初始加载所有数据,速度可能较慢 | 按需加载,初始加载快 |
| 用户体验 | 翻页、排序、搜索无需刷新页面,响应快 | 每次翻页都需要重新加载页面 |
| 适用场景 | 数据量不大时(几百到一两千条)体验好 | 数据量非常大时(成千上万条)性能更优 |
| 复杂度 | 前端需要额外引入和配置 JS 库 | 后端逻辑,Django 内置支持,相对简单 |
总结
- 富客户端的实现方式,用户体验更流畅,但对初始加载的数据量有限制。
- 传统的服务器端实现方式,更适合处理海量数据,但用户体验上稍逊一筹。

浙公网安备 33010602011771号