3.Django分页

###文章仅供学习使用,有问题欢迎指出

最近一直在想如何去为自己的博客网站分页,很高兴的是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">&laquo; 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 &raquo;</a>
        {% endif %}
    </span>
</div>
复制代码

更加完善的分页系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值