python 分頁器
阿新 • • 發佈:2021-08-17
class Pagination(object): def __init__(self,current_page,total_count,per_page=10,show_page=9): ''' 檢視的每一頁的數量 ''' self.per_page = per_page ''' 全部資料需要多少頁 ''' total_page,more = divmod(total_count,per_page) if more:total_page +=1 self.total_page = total_page ''' 頁碼必須是大於0的數 ''' if current_page < 1:current_page =1 ''' 如果輸入的是沒有的頁碼全部等於1 ''' try:current_page =int(current_page) except Exception as e:current_page = 1 ''' 如果訪問的頁碼數超過了總頁碼數 預設顯示最後一頁 ''' current_page = total_page if current_page > total_page else current_page self.current_page = current_page ''' 一個頁碼最多展示多少個數據' ''' self.show_page = show_page ''' 每一邊展示一半的資料 ''' self.half_show_page = show_page // 2 @property def start_page(self): ''' 查去頁碼對應的資料開始的位置 ''' return self.per_page * (self.current_page - 1) @property def end_page(self): ''' 查去頁碼對應的資料結束的位置 ''' return self.per_page * self.current_page def page_html(self): ''' 1.如果總頁面數小於你要顯示的頁碼數 開始頁面是1 結束是總頁面 2.如果左邊小於1了 頁面就不用向後面繼續減了 3.如果右邊大於總頁面了 頁面就不用向前面繼續加了 ''' if self.total_page < self.show_page: show_page_start = 1 show_page_end = self.total_page elif self.current_page - self.half_show_page < 1: show_page_start = 1 show_page_end = self.show_page elif self.current_page + self.half_show_page > self.total_page: show_page_end = self.total_page show_page_start = self.total_page - self.show_page + 1 else: show_page_start = self.current_page - self.half_show_page show_page_end = self.current_page + self.half_show_page page_list = [] page_list.append('<nav aria-label="Page navigation"><ul class="pagination">') page_list.append('<li><a href="/{}/?page=1">首頁</a></li>'.format(None)) if self.current_page -1 <1: page_list.append('<li class="disabled"><a href="/{}/?page={}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>'.format(None,self.current_page-1)) else: page_list.append('<li><a href="/{}/?page={}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>'.format(None,self.current_page-1)) for i in range(show_page_start,show_page_end+1): if self.current_page == i: x = '<li class="active"><a href="/{}/?page={}">{}</a></li>'.format(None, i, i) else: x = '<li><a href="/{}/?page={}">{}</a></li>'.format(None,i,i) page_list.append(x) page_html= ''.join(page_list) if self.current_page +1 >self.total_page: page_list.append('<li class="disabled"><a href="/{}/?page={}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>'.format(None, self.current_page + 1)) else: page_list.append('<li><a href="/{}/?page={}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>'.format(None, self.current_page + 1)) page_list.append('<li><a href="/{}/?page={}">尾頁</a></li>'.format(None,self.total_page)) page_list.append(' </ul></nav>') return page_list
1.例項化物件傳遞 必須要傳當前的頁碼數和總資料個數,預設傳參 每一頁展示的資料個數,展示最大的頁碼
2.切面擷取展示資料個數 呼叫方法
3.呼叫方法獲取html頁面 boostrap頁面
(路由未定義)