分页器(自写)

自己编写的分页器:

1、大概思路:分页功能实际上实现的就是改变显示内容,没有改变页面。我们通过切片从数据库中获取想要的数据,比如你要一页显示十条内容,那么第一页的数据范围就是[0, 10],第二页就是[10, 20],我们可以通过得到的当前页的页码来计算数据范围。

class PageInfo(object):
    # 传入当前页、总数据条数、每一页打算呈现的数据数量、打算显示多少个页码
    def __init__(self, current_page, count, per_page, show_page):
        try:
            self.current_page = int(current_page)  #判断选择的当前页是不是数字,不是则默认为第一页
        except Exception as e:
            self.current_page = 1
        self.per_page = per_page  #将打算显示的数据数量复制给这个类的属性
        a, b = divmod(count, per_page)   #divmod这个函数会返回(整数,余数)
        if b:  #判断余数是否为0
            a += 1   #余数不为0.则需要再加一页
        self.page_counter = a
        self.show_page = show_page

    def start(self):
        return (self.current_page - 1) * self.per_page   #返回从第几条开始获取数据

    def end(self):
        return self.current_page * self.per_page   #返回在第几条结束获取数据

    def pageer(self):  
        page_list = []
        if self.page_counter < self.show_page:
            if self.page_counter >= 1:
                temp = '<li><a href="/message/%s.html/">首页</a></li>' % (1,)
            else:
                temp = '<li><a href="">首页</a></li>'
            page_list.append(temp)
            for i in range(1, self.page_counter + 1):
                if self.current_page == i:
                    temp = '<li class="active"><a href="/message/%s.html/">%s</a></li>' % (i, i)
                else:
                    temp = '<li><a href="/message/%s.html/">%s</a></li>' % (i, i)
                page_list.append(temp)
            if self.page_counter >= 1:
                temp = '<li><a href="/message/%s.html/">尾页</a></li>' % (self.page_counter)
            else:
                temp = '<li><a href="">尾页</a></li>'
            page_list.append(temp)
        else:
            half = (self.show_page - 1) / 2
            half = int(half)
            start = 1
            end = self.show_page + 1
            if self.current_page > half:
                start = self.current_page - half
                end = self.current_page + half + 1
            if self.current_page > self.page_counter - half:
                start = self.page_counter - self.show_page + 1
                end = self.page_counter + 1
            if self.page_counter >= 1:
                temp = '<li><a href="/message/%s.html/">首页</a></li>' % (1,)
            else:
                temp = '<li><a href="">首页</a></li>'
            page_list.append(temp)
            for i in range(start, end):
                if self.current_page == i:
                    temp = '<li class="active"><a href="/message/%s.html/">%s</a></li>' % (i, i)
                else:
                    temp = '<li><a href="/message/%s.html/">%s</a></li>' % (i, i)
                page_list.append(temp)
            if self.page_counter >= 1:
                temp = '<li><a href="/message/%s.html/">尾页</a></li>' % (self.page_counter)
            else:
                temp = '<li><a href="">尾页</a></li>'
            page_list.append(temp)
        return ''.join(page_list)

2、上述代码的解释:上述代码中传入了当前页面的号码,还有数据库中的数据量,每页你要显示的数据量,以及分页器中你要显示的分页数。

猜你喜欢

转载自www.cnblogs.com/bhx77/p/9123176.html