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

  

猜你喜欢

转载自www.cnblogs.com/tcpblog/p/10133314.html