1. 程式人生 > >django中的分頁標籤

django中的分頁標籤

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