Django 分页

Django分页的常用方法

  1. django 提供了一个Paginator的方法

    from django.core.paginator import Paginator
    
  2. 实例化对象

    paginator = Paginator(datalist,per_page)  # 里面传两个参数 数据和每页显示的记录数
    
  3. 获取数据的分页范围

    page_range = paginator.page_range  # 获取数据的分页范围 range(1,x) 从第一页到第x-1页
    
  4. 获取每页的数据

    page_list = paginator.page(num) # 传入页码 获取当前页的数据
    
  5. 获取总页数

    total_page = paginator.num_pages
    
  6. 指定显示的页数

    # 当前页码
    current_num = int(request.GET.get("page", 1))  
    #  显示方式
    # 一般网页展示11页,左5页,右5页,加上当前页,共11页
    # 11 就是可显示的页数 
    # 5 就是中位数 => 总页数//2
    if paginator.num_pages > 11:  
        if current_num - 5 < 1:  # 如果前5页小于1时
            pageRange = range(1, 11)  # 页码的列表:范围是初始状态
        elif current_num + 5 > paginator.num_pages:  # 如果后5页大于总页数时
            # 页码的列表:范围是(当前页-5,总页数+1)。因为range顾头不顾尾,需要加1
            pageRange = range(current_num - 5, paginator.num_pages + 1)
        else:
            # 页码的列表:后5页正常时,页码范围是(当前页-5,当前页+6)。注意不是+5,因为range顾头不顾尾!
            pageRange = range(current_num - 5, current_num + 6)
    else:
        pageRange = paginator.page_range  # 页码的列表
    
    
  7. 封装方法

     def get_page(self,pageobj,p,showPage=11):
         # 1.获取总页数
         totalPage = pageobj.num_pages
         # 2.获取中位数
         midPage = int(showPage/2)
         # 3.如果总页数大于可显示的页数
         if totalPage > showPage:
             # 5. 判断当前页如果小于中位数
             if p - midPage < 1:
                 page = [i for i in range(1,showPage+1)]
             elif p + midPage > totalPage:
                 # 6. 如果当前页+中位数大于总页数的话,那么只能是总页数-(中位数-1)到总页数+1
                 page = [i for i in range(totalPage-(showPage-1),totalPage+1)]
             else:
                 # 7. 如果在区间的话,应该是当前页-中位数到当前页+(中位数+1)
                 page = [i for i in range(p-midPage,p+midPage+1)]
         else:
             # 4. 当总页数小于可显示的页数的时候,全部显示
             page = [i for i in pageobj.page_range]
         return page
    
原文地址:https://www.cnblogs.com/wuxiaoshi/p/11762749.html