###文章仅供学习使用,有问题欢迎指出
最近一直在想如何去为自己的博客网站分页,很高兴的是Django自带一个分页的系统
他叫Pagination
官方文档
https://docs.djangoproject.com/zh-hans/2.0/topics/pagination/
Paginaion的应用
在使用Pagination时我们要从Django的包中引入
From django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
以下内容截自官方文档
>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)
复制代码
通过objects.get.all()我们可以获取所用的数据,这时我们创建一个Paginator的实力,并对他进行分类
def __init__(self, object_list, per_page, orphans=0,
allow_empty_first_page=True):
self.object_list = object_list
self._check_object_list_is_ordered()
self.per_page = int(per_page)
self.orphans = int(orphans)
self.allow_empty_first_page = allow_empty_first_page
复制代码
内置源码 object_list是你的列表即数据,per_page按多少分为一页,all_empty_first_page 是否允许第一页为空,满足时报错。当我们读取不到任何数据的时候,达到满足条件
>>> p.count
4
>>> p.num_pages
2
>>> type(p.page_range)
<class 'range_iterator'>
>>> p.page_range
range(1, 3)
复制代码
p.count 可分类的数据数量,即['john', 'paul', 'george', 'ringo']
p.num_page 分类之后的页数
>>> page1 = p.page(1)
>>> page1
<Page 1 of 2>
>>> page1.object_list
['john', 'paul']
复制代码
page1 = p.page(1) 此时page1表示第一条数据和第二条数据
同理
page2 =p.page(2)
此时page2表示3.4两行数据
是否具有下一页page1.has_next()
是否具有上一页page1.has_previous()
是否还有其它的页 Page1.has_other_pages()
下一页的页码 Page.nex_page_number()
上一页的页码 page2.previous_page_number()
当前页最开始的时第几条数据page2.start_index()
当前页最后结束的时第几条数据 page2.end_index()
p.page(0) 当前页的第0条数据 EmptyPage: That page number is less than 1
p.page(3)当前页的第三条数据 EmptyPage: That page contains no results
View视图的编写
#1.获取数据
stu_list = Student.objects.all() `
#2.分类
pagintor = Pagintor(stu_list,5)`
#3.获取页面,并且转换
page = request.GET.get('page')
stus = paginator.get_page(page)
#4.返回
return render(request, 'list.html', {'stu': stu})
复制代码
{% for stu in stus %}
...
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if contacts.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ stu.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ stu.number }} of {{ stu.paginator.num_pages }}.
</span>
{% if contacts.has_next %}
<a href="?page={{ stu.next_page_number }}">next</a>
<a href="?page={{ stu.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
复制代码
更加完善的分页系统