zoukankan      html  css  js  c++  java
  • 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
      
  • 相关阅读:
    Java ,python面向对象的继承及其区别
    谈谈我理解的敏捷开发
    Centos7 升级python3,解决升级后不兼容问题
    Django + Uwsgi + Nginx 的生产环境部署
    理解Python协程:从yield/send到yield from再到async/await
    【转】Python 数据库连接池
    为何GET只发一次TCP连接,POST发两次TCP连接
    Python简单密码加密程序,加盐(salt)md5
    spring学习(三) ———— spring事务操作
    spring学习(二) ———— AOP之AspectJ框架的使用
  • 原文地址:https://www.cnblogs.com/wuxiaoshi/p/11762749.html
Copyright © 2011-2022 走看看