python-自定义分页组件

使用方法
"""
自定义分页组件的使用方法:
    pager_obj = Pagination(request.GET.get('page',1),len(HOST_LIST),request.path_info,request.GET)
    host_list = HOST_LIST[pager_obj.start:pager_obj.end]#每页显示的长度
    html = pager_obj.page_html()#返回的页码
    return render(request,'hosts.html',{'host_list':host_list,"page_html":html})
"""
class Pagination(object):
    def __init__(self, current_page, totalCount, base_url,parmas, per_page_count=10, max_page_count=11):
        try:
            current_page = int(current_page)
        except:
            current_page = 1
        if current_page < 1:
            current_page = 1
        # 当前页
        self.current_page = current_page
        # 总记录数/总条数
        self.totalCount = totalCount
        # 每页显示的数量
        self.per_page_count = per_page_count

        max_page_num, v = divmod(totalCount, per_page_count)
        if v:
            max_page_num += 1

        # 总页数
        self.max_page_num = max_page_num
        # 显示页码的个数
        # 页面上默认显示11个页面(当前页在中间)
        self.max_page_count = max_page_count

        self.half_page_count = int((self.max_page_count - 1) / 2)
        # URL前缀
        self.base_url = base_url

        import copy
        parmas=copy.deepcopy(parmas)
        print(parmas,'------******')
        self.parmas=parmas
    # 每页开始的记录
    @property
    def start(self):
        return (self.current_page - 1) * self.per_page_count

    # 每页结束的记录
    @property
    def end(self):
        return self.per_page_count * self.current_page

    # 页码显示
    def page_html(self):

        if self.max_page_num < self.max_page_count:
            page_start = 1
            page_end = self.max_page_num
        else:
            if self.current_page < self.half_page_count:
                page_start = 1
                page_end = self.max_page_count

            else:
                if (self.current_page + self.half_page_count) > self.max_page_num:
                    page_start = self.max_page_num - self.max_page_count + 1
                    page_end = self.max_page_num

                else:
                    page_start = self.current_page - self.half_page_count
                    page_end = self.current_page + self.half_page_count

        html_list = []
        # 首页
        self.parmas['page'] = 1
        first_page = '<li><a href="%s?%s">首页</a></li>' % (self.base_url,self.parmas.urlencode())
        html_list.append(first_page)

        # 上一页

        if self.current_page == 1:
            pre_page='<li class="disabled"><a href="#" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'
            #pre_page = "<a href='%s?%s' >上一页</a>" % (self.base_url, self.parmas.urlencode())
        else:
            self.parmas['page'] =self.current_page-1
            #pre_page = "<a href='%s?%s'>上一页</a>" % (self.base_url, self.parmas.urlencode())
            pre_page = '<li><a href="%s?%s" aria-label="Previous"><span aria-hidden="true"> &laquo; </span></a> </li>'%(
            self.base_url, self.parmas.urlencode())
        html_list.append(pre_page)


        for i in range(page_start, page_end + 1):
            self.parmas['page'] =i
            if i == self.current_page:
                #tmp = "<a href='%s?%s' class='active'>%s</a>" % (self.base_url, self.parmas.urlencode(), i)
                tmp='<li class="active"><a href="%s?%s" >%s</a></li>'%(self.base_url, self.parmas.urlencode(), i)
            else:
                tmp='<li><a href="%s?%s" >%s</a></li>'%(self.base_url, self.parmas.urlencode(), i)

            html_list.append(tmp)

        # 下一页
        if self.current_page == self.max_page_num:

            #next_page = "<a href='%s?%s'>下一页</a>" % (self.base_url, self.parmas.urlencode())
            next_page='<li class="disabled"><a  aria-label="Next" ><span aria-hidden="true">&raquo;</span></a></li>'
        else:
            self.parmas['page']=self.current_page+1
            #next_page = "<a href='%s?%s'>下一页</a>" % (self.base_url,self.parmas.urlencode())
            next_page= next_page='<li><a href="%s?%s" aria-label="Next" disabled="disabled"><span aria-hidden="true">&raquo;</span></a></li>'% (self.base_url,self.parmas.urlencode())

        html_list.append(next_page)

        self.parmas['page']=self.max_page_num
        last_url = "<li><a href='%s?%s'>尾页</a></li>" % (self.base_url, self.parmas.urlencode())
        html_list.append(last_url)
        return ''.join(html_list)
pager
原文地址:https://www.cnblogs.com/ctztake/p/8075863.html