Django自带分页
from django.core.paginator import Paginator, Pageusers = models.UserInfo.objects.all()paginator = Paginator(users, 10)"""per_pate: 每页显示条目数量count: 数据总个数num_pages: 总页数page_range:总页数的索引范围page: page对象"""posts = paginator.page(current_page) # current_page 当前页的页数"""has_next 是否有下一页next_page_number 下一页页码has_previous 是否有上一页previous_page_number 上一页页码object_list 当前页的数据number 当前页paginator paginator对象"""return render('usres.html', {'posts': posts})
自定义分页
class PageInfo: def __init__(self, current_page, all_count, per_page, base_url, show_page=9): """ :param current_page: 当前页数 :param all_count: 数据库总行数 :param per_page: 每页显示行数 :param base_url: 基础url :param show_page: 最多显示页码个数 """ try: self.current_page = int(current_page) except Exception as e: self.current_page = 1 self.all_count = all_count self.per_apge = per_page self.all_page, n2 = divmod(self.all_count, self.per_apge) if n2 > 0: self.all_page += 1 self.show_page = show_page self.base_url = base_url @property def start(self): """ 当前页数据库起始位置 :return: """ return (self.current_page - 1) * self.per_apge @property def end(self): """ 当前页数据库结束位置 :return: """ return self.current_page * self.per_apge def pager(self): page_list = [] # 计算显示页号的起始页号和终止页号 if self.all_page <= self.show_page: # 当总页数小于要显示的页数 page_start = 1 page_end = self.all_page + 1 else: # 总页数大于要显示的页数 half = (self.show_page-1) // 2 # 当前页在中间时前后显示的页的数量 if self.current_page <= half: # 当前页小于中间位置时 起始页为1 终止页为show_page page_start = 1 page_end = self.show_page + 1 elif self.current_page+half > self.all_page: # 当前页+右边显示数量 > 总页数是 page_end = self.all_page + 1 page_start = page_end - self.show_page else: page_start = self.current_page - half page_end = self.current_page + half + 1 # 上一页按钮 if self.current_page > 1: home = "<li><a href='%s?page=1'>首页</a></li>" % self.base_url prev = "<li><a href='%s?page=%s'>上一页</a></li>" % (self.base_url, self.current_page-1) else: home = "<li class='disabled'><a>首页</a></li>" prev = "<li class='disabled'><a>上一页</a></li>" page_list.append(home) page_list.append(prev) # 页码显示 for i in range(page_start, page_end): if i == self.current_page: temp = "<li class='active'><a>%s</a></li>" % 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='%s?page=%s'>下一页</a></li>" % (self.base_url, self.current_page+1) trailer = "<li><a href='%s?page=%s'>尾页</a></li>" % (self.base_url, self.all_page) else: nex = "<li class='disabled'><a>下一页</a></li>" trailer = "<li class='disabled'><a>尾页</a></li>" page_list.append(nex) page_list.append(trailer) return ''.join(page_list)