django中的分頁標籤
阿新 • • 發佈:2018-12-17
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