- Django 的内置分页只支持网址的分页,没有提供分页器,分页器则需要自己实现
# views.py
from django.shortcuts import render, redirect, HttpResponse, reverse
from .models import *
# 导入Django内置分页所需的模块
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def employee_list(request):
current_page = request.GET.get("page") # 获取当前页数
ret_data = Employee.objects.all()
paginator = Paginator(ret_data, 10)
'''
paginator 对象下的相关属性
paginator.per_page: 每页显示条目数量
paginator.count: 数据总个数
paginator.num_pages: 总页数
paginator.page_range: 总页数的索引范围,如: (1,10),(1,200)
paginator.page: page对象
'''
try:
posts = paginator.page(current_page)
'''
posts 对象下的相关属性,一般用于模板中制作分页器时使用
posts.per_page: 每页显示条目数量
posts.count: 数据总个数
posts.num_pages: 总页数
posts.page_range: 总页数的索引范围,如: (1,10),(1,200)
posts.page: page对象
'''
except PageNotAnInteger:
# 如果输入其他非数字的参数,那么就跳到第一页
posts = paginator.page(1)
except EmptyPage:
# 如果超过最大分页数,那么就跳到最后一页
posts = paginator.page(paginator.num_pages)
return render(request, 'employee_list.html', {'employees': posts})
# employee_list.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Title</title>
<meta name="description" content="">
<meta name="keywords" content="">
{% load static %}
<link rel="stylesheet" href='{% static 'bootstrap/css/bootstrap.min.css' %}'>
</head>
<body>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<th>序号</th>
<th>作者名称</th>
<th>年龄</th>
<th>薪资</th>
<th>省份</th>
</tr>
</thead>
<tbody>
{% for employee in employees %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ employee.name }}</td>
<td>{{ employee.age }}</td>
<td>{{ employee.salary }}</td>
<td>{{ employee.province }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<!-- 分页器 -->
<ul class="pagination">
{% if employees.has_previous %}
<li><a href="/employee_list/?page={{ employees.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><a href="#">«</a></li>
{% endif %}
<li class="active"><a href="/employee_list/?page={{ employees.number }}">{{ employees.number }}</a></li>
{% if employees.has_next %}
<li><a href="/employee_list/?page={{ employees.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><a href="#">»</a></li>
{% endif %}
</ul>
</div>
</body>
</html>