django 7.3 分页

django 分页

  1. 概念:
      Django提供了paginator类可以方便的实现分页功能。实际上是使用Paginator对象,负责分页数据整体的管理。

    1. 对象的构造方法:
        paginator = Paginator(object_list,per_page),object_list是需要分页的数据的对象列表,per_page是每页数据的个数。
        Paginator属性:

      	count:需要分页的数据的对象总数
      	num_pages: 分页后的页面总数
      	page_range:1开始的range对象,用于记录当前码数
      	per_page:每页数据的个数
      

        paginator对象.page(number): 参数number是页码信息(从1开始),返回当前number页对应的页信息,如果提供的页码不存在,则抛出InvalidPage异常。

    2. 针对到具体某一页的时候,用到的是page对象:page对象负责具体某一页的数据的管理。
        创建对象:Paginator对象的page()方法返回Page对象,page = paginator.page(页码)
        Page对象属性:

      	object_list: 当前页上所有数据对象的列表
      	number: 当前页的序号,从1开始
      	paginator: 当前page对象相关的Paginator对象
      

        page对象方法:

      	has_next():如果有下一页返回True;
      	has_previous():如果有上一页则返回True
      	has_other_pages():如果有上一页或者下一页就返回True
      	next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
      	previous_page_number(): 返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
      
  2. 实现:

    1. 路由:path(‘test_page’,views.test_page),

    2. 模板:

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>test_page</title>
      </head>
      <body>
      
      {% for p in current_page %}
          <p>
              {{ p }}
          </p>
      {% endfor %}
      
      {% if current_page.has_previous %}
          <a href="/test_page?page={{ current_page.previous_page_number }}">上一页</a>
      {% else %}
          上一页
      {% endif %}
      
      {#当前页显示页码,非当前页显示a标签#}
      {% for page_num in paginator.page_range %}
          {% if page_num == current_page.number %}
              {{ page_num }}
          {% else %}
              <a href="/test_page?page={{ page_num }}">{{ page_num }}</a>
          {% endif %}
      {% endfor %}
      
      
      {% if current_page.has_next %}
          <a href="/test_page?page={{ current_page.next_page_number }}">下一页</a>
      {% else %}
          下一页
      {% endif %}
      
      </body>
      </html>
      
    3. 视图函数:

      def test_page(request):
      
          #/test_page/4
          #/test_page?page=4
          #拿到当前的页码,没有的话就默认是1
          page_num = request.GET.get('page',1)
          all_data = ['a','b','c','d','e','f','g','h','i']
      
          #初始化paginator
          #第一个参数是总的数据,第二个参数是每页显示的条数
          paginator = Paginator(all_data,2)
          #初始化具体页码对应的page对象,管具体的每一页
          current_page = paginator.page(int(page_num))
      
          return render(request,'test_page.html',locals())
          #视图函数捋一捋,准备好数据,初始化好paginator,根据页码初始化好page对象
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值