django分页器Paginator的基本使用

Paginator基础知识:

 说明:为了方便,这部分我没有使用QuerySet做数据源,而是用一个列表做数据源

from django.core.paginator import Paginator

#假设下面的列表就是我们要分页的数据,我们希望每页显示3个名字
source=['黑沼爽子','风早翔太','碓氷拓海','玖兰枢','锥生零','入江直树']
#实例化Paginator,两个参数分别是要分页的数据,以及每页希望显示多少条数据
p=Paginator(source,3)
#用Paginator对象的get_page方法获得第一页的page对象,参数是页码
page1=p.get_page(1)
#用同样的方法获得第二页的page对象
page2=p.get_page(2)
#遍历第一页的page对象,获取第一页会显示的全部数据并打印出来
print('下面是第一页要显示的3条数据:')
for data in page1:
    print(data)
#通过一个page对象获取它的页码并打印出来
print('page2的页码是',page2.number)
#通过一个page对象获取本次分页的总页数
print('总页数是',page1.paginator.num_pages)
#通过一个page对象获取一个可迭代的所有页码对象(这个对象从1开始,使用起来非常方便)
print('可迭代的页码对象',page1.paginator.page_range)

终端:

下面是第一页要显示的3条数据:
黑沼爽子
风早翔太
碓氷拓海
page2的页码是 2
总页数是 2
可迭代的页码对象 range(1, 3)

基础应用实例:

urls.py

from django.urls import re_path
from . import views


urlpatterns=[
    #路由里的\d+用于接收一个数字,这个数字就是页码
    re_path(r'^studentpage/(\d+)/$',views.studentpage),
]

views.py

from django.shortcuts import render
from .models import Students
from django.core.paginator import Paginator

def studentpage(request,pageid):
    '''这是管理学生信息分页的视图'''
    #取出全部学生数据
    allStudentsList=Students.stuObj.all()
    #把全部学生分页,每页显示两条数据,生成了一个分页器的实例
    paginator=Paginator(allStudentsList,2)
    #根据url里的pageid拿到对应的那一页的数据,这个pageid就是我们配路由的时候写的\d+接收到的整数
    #currentPageList是一个page对象,它不仅包含了这一页需要显示的学生信息,还有这一页的页码,而且可以通过它找到总页数
    currentPageList=paginator.page(pageid)
    #把currentPageList传给模板
    return render(request,'myapp/studentpage.html',{'currentPageList':currentPageList})

studentpage.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>分页显示学生</title>
        <style>
       
        #pages li{
            float:left;
            list-style: none;
            width:20px;
            margin:5px;
            text-align: center;
            
        }
        a{
            text-decoration: none;
        }
        /* 下面这个类的作用就在于设置背景颜色 */
        .active{
            background-color: aqua;
        }
        </style>
    </head>
    <body>
        <ul>
            <!-- 遍历当前页的page对象,展示出当前页需要展示的学生姓名和简介 -->
            {%for student in currentPageList%}
            <li>{{student.sname}}--{{student.sinfo}}</li>
            {%endfor%}
        </ul>

        <ul id='pages'>
            <!-- 遍历页码迭代器,生成下方的页码列表 -->
            {%for index in currentPageList.paginator.page_range%}
            <!-- 如果页码列表里的一个数字正好和当前展示的这个page对象的页码一样,那么就让这个数字归为active类,也就是给它添加背景颜色。这样我们就能一眼看出我们现在处于哪一页。并且因为我们就处于这一页,所以这个数字不需要链接。 -->
            {%if index == currentPageList.number%}
            <li class='active'>{{index}}</li>
            <!-- 其他页码需要链接,不需要背景颜色 -->
            {%else%}
            <li><a href="/studentpage/{{index}}/">{{index}}</a></li>
            {%endif%}
            {%endfor%}
        </ul>
    </body>
</html>

 

效果图:

 

如果这篇博文帮到了你,就请给我点个吧(#^.^#)

有疑问也欢迎留言~博主可nice啦,在线秒回ヾ(◍°∇°◍)ノ゙

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值