wefinger

Django分页器使用简记
前言最近博主在进一步学习django并尝试使用django搭建一个个人博客网站,然而博主的前端知识极度匮乏,进度极...
扫描右侧二维码阅读全文
17
2018/06

Django分页器使用简记

前言

最近博主在进一步学习django并尝试使用django搭建一个个人博客网站,然而博主的前端知识极度匮乏,进度极其缓慢。。。在进行到博客的分页功能模块时,开始并不知道django内置分页器,自己哼哧哼哧的写了半天,然而偶然的一次谷歌让我发现了新大陆,原来他内置分页器啊,我瞬间“泪流满面”,进行了一番学习后顺利的完成了分页功能模块,这里简单记录一下分页器的使用吧。


正文

使用情景

当个人博客的文章开始增多时,所有文章全显示在一个页面时会显得杂乱,而且加载缓慢,为了解决这个问题,将博文列表分页显示是一个不错的解决方案(当然不止这一种解决方案)

简单使用


# 导入分页器,Paginator 其实是一个类,有兴趣的可以阅读其源码
from django.core.paginator import Paginator 
# 从modles导入自己的Blog模型对象,博主设计改模型中包含了博文标题、内容、标签、作者、创建时间等信息。
from .models import Blog  

# 获取到所有文章
articles = Blog.objects.all()

# 实例化分页器,并进行分页
# Paginator(object_list, per_page, [orphans=0, allow_empty_first_page=True])
# Paginator有4个参数,object_list(数据对象总数), per_page(每分页数据对象个数)为必要参数。
# object_list可以是list,tuple,QuerySet 或者任意对象,只要它 有 count() 或者 len() 方法。 Django会首先尝试调用object_list的count(),如果没有再尝试len()。
# orphans(最后一页对象的最少数目,默认为0) ,当最后一页对象小于这个值时,将会合并到前一页。
# allow_empty_first_page(首页是否允许为空,默认为True),如果是 False 而且`object_list` 为空,那么会触发 EmptyPage 异常。
pages = Paginator(articles, 5)

## 分页器对象相关属性和方法
pages.num_pages       #总分页数
pages.count           #总对象数,本例就就是总文章数。
pages.page_range      #返回一个包含全部页码的range对象,例如range(1,23)

# 返回某分页的分页对象,需要传递一个参数number(页码),当该参数不在总页码范围内时会抛出异常。
page = pages.page(3)  

# 返回某分页的分页对象,需要传递一个参数number(页码)。
# 当number为无效参数(非int类型)时number=1,超出页码范围时number默认为最大页码。
# 推荐使用此方法获取分页,减少异常。
page = pages.get_page(3) 

## 分页对象相关属性和方法
Page.has_next()                #是否存在下一页,存在则返回True。
 
Page.has_previous()            #是否存在上一页,存在返回 True。
 
Page.has_other_pages()         #是否存在上一页或下一页,存在返回True。
 
Page.next_page_number()        #返回下一页的页码。如果下一页不存在,抛出InvalidPage异常。
 
Page.previous_page_number()    #返回上一页的页码。如果上一页不存在,抛出InvalidPage异常。
 
Page.start_index()             #返回当前分页第一个对象的序号,例如本例中每页5个对象,当前分页为第三页,则返回11
 
Page.end_index()               #返回当前分页最后一个对象的序号,例如本例中每页5个对象,当前分页为第三页,则返回15

django内置分页器的大致使用方法就是这样了,具体的应用,可以结合你的需求进行处理。

Last modification:June 17th, 2018 at 11:56 am
If you think my article is useful to you, please feel free to appreciate

2 comments

  1. ZAERA

    Google search NB,准备开发个python网页?

    1. wefinger
      @ZAERA

      准备写一个django 博客。。正在进行时,前端写的不好。。正在恶补

Leave a Comment