django Paginator

这篇博客介绍了Django的Paginator类如何用于实现分页功能。内容包括了Paginator的基本使用、方法和属性,以及如何在实际项目中,比如创建一个网站的首页,展示5条内容的分页操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django Paginator 分页

  1. Django提供了一些类来帮助您管理分页数据 - 即分布在多个页面上的数据,使用“上一页/下一页”链接。这些教程都在django/core/paginator.py。

  2. 下面的例子能够让你们体验django自带的分页功能

  3. Python manage.py shell

  4. #首先导入相应的模块
    
    >>> from django.core.paginator import Paginator
    #建一个列表
    >>> objects = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
    >>> p = Paginator(objects, 2)	#这一句代表的是把objects列表分为每页2条数据
    >>> p.count	#objects总数
    >>> 20
    >>> p.num_pages	#一共多少页
    >>> 10
    >>> p.page_range #把总页数变为range
    >>> range(1, 11)
    >>> page1 = p.page(1)	#第一页是一个<page 1 of 10>类型
    >>> page1.object_list	#<page 1 of 10>类型的具体数据
    >>> page1.has_next()	#布尔类型,是否有下一页
    >>> page1.has_previous()	#布尔类型,是否有上一页
    >>> page1.has_other_pages() #如果有上一页或下一页,返回True。
    >>> page1.next_page_number() #返回下一页的页码。如果下一页不存在,抛出InvlidPage异常。
    >>> page1.previous_page_number() 返回上一页的页码。如果上一页不存在,抛出InvalidPage异常。
    >>> page1.start_index() #返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将	 五个对象的列表分为每页两个对象,第二页的start_index()会返回3。
    >>> page.end_index() #返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将	 五个对象的列表分为每页两个对象,第二页的end_index() 会返回 4
    >>> 
    >>> page1.object_list #当前页上所有对象的列表。
    >>> page1.number      #当前页的序号,从1开始。
    >>> page1.paginator   #相关的Paginator对象
    
  5. 上面只是Paginator的方法和属性,接下来就来一个demo

  6. 现在做一个网站,并且是首页只显示5页的内容,那么接下来有分析一下该怎么做

  7. # 要求:页面上只显示5页
    分以下几种情况
    1.总页数小于五页,页面上显示所有页码
    2.如果当前页是前三页,显示1-5页
    3.如果当前页是后三页,显示后5页
    4.其他情况,显示当前页的前2页,当前页的后两页
    
    demo:
    	from django.core.paginator import Paginator
    	objects = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
    	num_pages = Paginator(objects,2).num_pages	#总页数
    	page = Paginator(onjects,2).page(1).number  #当前页
    	if num_pages < 5:
    		pages = range(1,num_pages+1)
    	elif num_pages <=3:
    		pages = range(1,6)
    	elif num_pages - page <= 2:
    		pages = range(num_pages-4,num_pages+1)
    	else:
    		page = range(page-2,page+3)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值