分页框架

views代码:

class PageInfo:
    def __init__(self, page_num, per_page, all_data, base_page):
        '''
        :param page_num: 当前页
        :param per_page: 每页数据数量
        :param all_data: 总数据量
        :param base_page: 固定页数
       '''
        try:
            self.page_num = int(page_num)
        except Exception as e:
            self.page_num = 1
            self.per_page = int(per_page)
            self.all_data = all_data
            self.base_page = base_page

    def start(self):
        return (self.page_num - 1) * self.per_page

    def end(self):
        return self.page_num * self.per_page

    # 总页数函数(总数据/每页条数)
    def total_pages(self):
        a, b = divmod(self.all_data, self.per_page)
        if b:
            a = a + 1
        return a

    def pager(self):
        page_list = []
        harf = divmod(self.base_page, 2)[0]
        # 如果总页数小于固定分页
        if self.total_pages() <= self.base_page:
            begin = 1
            end = self.total_pages()
        # 如果当前页 + 固定页的一半大于总页数
        elif self.page_num + harf >= self.total_pages():
            begin = self.total_pages() - self.base_page + 1
            end = self.total_pages()
    # 如果当前页小于harf+1
        elif self.page_num < harf + 1:
            begin = 1
            end = self.base_page
        else:
            begin = self.page_num - harf
            end = self.page_num + harf
    # 上一页
        if self.page_num <= 1:
            prev = '<li><a href="#">上一页</a></li>'
        else:
            prev = '<li><a href="?p=%s">上一页</a></li>' % (self.page_num - 1)
        page_list.append(prev)

        for i in range(begin, end + 1):
            if i == self.page_num:
                temp = '<li class="active"><a href="?p=%s">%s</a></li>' % (i, i)
            else:
                temp = '<li><a href="?p=%s">%s</a></li>' % (i, i)
            page_list.append(temp)
    # 下一页
        if self.page_num >= self.total_pages():
            prev = '<li><a href="#">下一页</a></li>'
        else:
            prev = '<li><a href="?p=%s">下一页</a></li>' % (self.page_num + 1)
            page_list.append(prev)
        return page_list
        
        
def custom(request):
    page_num = request.GET.get('p') #当前页
    all_page = models.UserInfo.objects.all().count()
    # 实例化一个page_info对象
    page_info = PageInfo(page_num,10,all_page,11)
    user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
    return render(request,'custom.html',{'user_list':user_list,'page_list':page_info.pager()})

 


 

 

 

HTML代码:

<label for="">
  #显示分页内容
     {% for row in user_list %} <li>{{ row.id }},{{ row.name }},{{ row.age }}</li> {% endfor %}
  #分页栏
<nav aria-label="Page navigation"> <ul class="pagination"> {% for page in page_list %} {{ page |safe }} {% endfor %} </ul> </nav> </label>

 

posted @ 2019-02-26 15:18  熙浅  阅读(447)  评论(0编辑  收藏  举报