一、custom.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css"> <link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css"> </head> <body> <h1>用户列表</h1> <table class="table table-striped table table-bordered table table-hover"> <tr> <td>姓名</td> <td>年龄</td> <td>地址</td> </tr> {% for row in user_list %} <tr> <td>{{ row.username }}</td> <td>{{ row.age }}</td> <td>{{ row.address }}</td> </tr> {% endfor %} </table> <nav aria-label="Page navigation"> <ul class="pagination"> {{ page_info.pager|safe }} </ul> </nav> </body> </html>
二、view.py下的函数
def custom(request): # 获取路径信息 url = request.META['PATH_INFO'] # 得到数据条数 all_count = models.UserInfo.objects.all().count() # 创建Pager对象 page_info = Pager(request.GET.get('page'), all_count, 10, url) # 获取当前页需要的User对象数组 user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()] print(page_info.start(), page_info.end()) for u in user_list: print(u.username) return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})
三、Pager插件
class Pager(object): def __init__(self, current_page, data_count, page_size, base_url, show_page=5): """ :param current_page: 当前页 :param data_count: 数据行总数 :param page_size: 页大小(每一页包含的数据行数) :param base_url: 跳转页面的url :param show_page: 需要显示的页数 """ self.data_count = data_count self.page_size = page_size self.base_url = base_url self.all_page = (self.data_count + self.page_size - 1) // self.page_size self.show_page = self.all_page if show_page > self.all_page else show_page try: self.current_page = int(current_page) except Exception as e: self.current_page = 1 def start(self): """ :return: 数据起始位置 """ print("页大小:" + str(self.page_size) + "--当前页: " + str(self.current_page)) return self.page_size * (self.current_page - 1) def end(self): """ :return: 数据末尾位置 """ return self.page_size * self.current_page def pageList(self): start, end = 1, self.show_page + 1 half_show_page = (self.show_page - 1) // 2 if half_show_page < self.current_page < self.all_page - half_show_page: start = self.current_page - half_show_page end = self.current_page + half_show_page + 1 # > 10 - 2 elif self.current_page >= self.all_page - half_show_page: end = self.all_page + 1 start = end - self.show_page return [i for i in range(start, end)] def pager(self): # 组装‘上一页’选项 page_list = [] if self.current_page <= 1: prev = "<li><a href='#'>上一页</a></li>" else: prev = "<li><a href='%s?page=%s'>上一页</a></li>" % (self.base_url, self.current_page - 1,) page_list.append(prev) # 组装中间页码数显示 for i in self.pageList(): if i == self.current_page: temp = "<li class='active'><a href='%s?page=%s'>%s</a></li>" % (self.base_url, i, i,) else: temp = "<li><a href='%s?page=%s'>%s</a></li>" % (self.base_url, i, i,) page_list.append(temp) # 组装'下一页'选项 if self.current_page >= self.all_page: nex = "<li><a href='#'>下一页</a></li>" else: nex = "<li><a href='%s?page=%s'>下一页</a></li>" % (self.base_url, self.current_page + 1,) page_list.append(nex) return ''.join(page_list)