class Pagination: def __init__(self, page, page_total, per_one_page=15, max_page=11): ''' :param page: 当前页 :param page_total: 总页数 :param per_one_page: 没有显示的条数 :param page_max: 最大分页标签数 ''' # 获取当前页面 try: page = int(page) if page < 0: page = 1 except Exception as e: print(e) page = 1 self.page = page # 没有显示的内容条数 self.per_one_page = per_one_page # 最大分页标签数 self.max_page = max_page # 最大分页标签的一半 self.half_page = self.max_page // 2 page_total, more = divmod(page_total, per_one_page) self.page_total = page_total # 总页数 if more: self.page_total += 1 # 当前分页标签起始和结束值 # 页面总数小于最大显示数 if page_total < self.max_page: self.page_start = 1 self.page_end = self.page_total else: # 当前页面小于分页最大显示数量的一半, if self.page - self.half_page < 0: self.page_start = 1 self.page_end = self.max_page # 当前页面大于总页面数量减去最大分页数量的一半 elif page + self.half_page > page_total: self.page_end = page_total self.page_start = page_total - max_page else: # 正常取值 self.page_start = page - self.half_page self.page_end = page + self.half_page # 取对象开始索引 @property def start(self): return (self.page - 1) * self.per_one_page # 取对象结束索引 @property def end(self): return self.page * self.per_one_page # 获取分页标签 @property def page_tag(self): # 页面分页标签列表 pager_li = [] # 上一页标签按钮 if self.page > 1: last_page = '<li><a href="?page={}"><span>«</span></a></li>'.format(self.page - 1) else: # 当前页是第一页 last_page = '<li class="disabled"><a ><span>«</span></a></li>' pager_li.append(last_page) # 循环生成分页标签 for i in range(self.page_start, self.page_end + 1): if i == self.page: pager_li.append('<li class="active"><a href="?page={}">{}</a></li>'.format(i, i)) else: pager_li.append('<li><a href="?page={}">{}</a></li>'.format(i, i)) # 下一页标签按钮 if self.page + 1 < self.page_total: next_page = '<li><a href="?page={}"> <span>»</span></a></li>'.format(self.page + 1) else: # 当前页是最后一页 next_page = '<li class="disabled"><a ><span>»</span></a></li>' # 所有标签联合 pager_li.append(next_page) pager = ' '.join(pager_li) return pager