1. 程式人生 > 其它 >python 分頁器

python 分頁器

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頁面

  (路由未定義)