1.属性和方法
#######1 Paginator对象的属性和方法 book_list=models.Book.objects.all() # 注意all操作实际是分批次获取数据,当前版本为limit 21 # 实例化得到对象 # 第一个参数:要分页的数据,book_list # 第二个参数:没有条数 paginator=Paginator(book_list,10) # 分页的数据 每页展示的数据个数 # Paginator对象的属性和方法 print(paginator.per_page) # 每页显示的条数 print(paginator.count) # 总条数,总共要分页多少条数据 print(paginator.num_pages) # 总页码数 print(paginator.page_range) # 页码数生成器 rang(1,总页数+1) ######3 Page对象的属性和方法 # Page类 的对象 page=paginator.page(2) # 第一页的对象 # 每一页的对象,属性和方法 print(page.count()) # 每一页的页码数 print(page.has_next()) # 有没有下一页 print(page.next_page_number()) # 下一页页码 print(page.has_previous()) # 是否有上一页 print(page.previous_page_number()) # 上一页页面 (当前页如果是第一页,没有上一页) print(page.object_list) # 当前页的所有数据 print(page.number) # 当前页的页码数
2.示例:
urls.py
from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.index,name='index'), path('test', views.test,name='test'), ]
view.py
from django.shortcuts import render, HttpResponse, reverse, redirect from django.core.paginator import Paginator from app01 import models # Create your views here. def index(request): # 设置跳转的页面,default=1为直接访问首页时初始化的值 page_num_int = int(request.GET.get('page',default=1)) book_list = models.Book.objects.all() # 注意all操作实际是分批次获取数据,当前版本为limit 21 # 实例化对象 # 设置每页展示的数据个数,默认为10 per_page = int(request.GET.get('per_page',default=10)) paginator = Paginator(book_list, per_page) # 分页的数据 每页展示的数据个数 # 如果总页数大于 展示个数+1 情况下,如果跳转的页面小于5则直接显示 1-10页,如果跳转的页面+5大于总页数则显示最后10页,否则显示当前页前5后5页 # 如果总页数小于 展示个数+1 情况下,则展示全部页数 if paginator.num_pages > 11: if (page_num_int - 5) < 1: page_range = range(1,11) elif page_num_int + 5 > paginator.num_pages: page_range = range(paginator.num_pages - 10,paginator.num_pages + 1) else: page_range = range(page_num_int - 5, page_num_int + 5) # 页码数生成器 rang(1,总页数+1) else: page_range = paginator.page_range page_obj = paginator.page(page_num_int) return render(request, 'index.html', locals())
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/static/jquery-3.3.1/jquery-3.3.1.min.js"></script> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"> <style> # 设置placeholder字体颜色 input::-webkit-input-placeholder{ color:rgb(51, 122, 183); } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ color:rgb(51, 122, 183); } input:-moz-placeholder{ /* Mozilla Firefox 4 to 18 */ color:rgb(51, 122, 183); } input:-ms-input-placeholder{ /* Internet Explorer 10-11 */ color:rgb(51, 122, 183); } .pg { line-height: 26px; } #jump,#per_page_num { padding: -1px; margin: -1px; border: 1px solid rgb(221, 221, 221); width: 70px; line-height: 30px; font-size: 14px; color: rgb(51, 122, 183); } #x1,#x2 { padding: 0; } </style> </head> <body> <div class="container-fluid"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <table class="table"> <thead> <tr> <th>ID</th> <th>名称</th> <th>价格</th> </tr> </thead> <tbody> # 获取当前页所有数据,循环替换 {% for page in page_obj.object_list %} <tr> <td>{{ page.id }}</td> <td>{{ page.name }}</td> <td>{{ page.price }}</td> </tr> {% endfor %} </tbody> </table> <div class="text-center"> <nav aria-label="Page navigation"> <ul class="pagination pg"> # 如果当前页有上一页(跳转到首页),则跳转否则禁止点击 {% if page_obj.has_previous %} <li> {# <a href="/?page={{ page_obj.previous_page_number }}" aria-label="Previous">#} <a href="/?page=1&per_page={{ per_page }}" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> {% else %} <li class="disabled"> <a href="" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> {% endif %} # 分页a标签添加跳转链接,当前页添加active属性 {% for page_num in page_range %} {% if page_num_int == page_num %} <li class="active"><a href="/?page={{ page_num }}">{{ page_num }}</a></li> {% else %} <li><a href="/?page={{ page_num }}&per_page={{ per_page }}">{{ page_num }}</a></li> {% endif %} {% endfor %} #如果不是最后一页则展示,否则不展示 {% if page_num_int != paginator.num_pages %} <li><a href="/?page={{ paginator.num_pages }}&per_page={{ per_page }}">... {{ paginator.num_pages }}</a></li> {% endif %} # 如果有下一页则跳转,否则禁用 {% if page_obj.has_next %} <li> {# <a href="/?page={{ page_obj.next_page_number }}" aria-label="Next">#} <a href="/?page={{ paginator.num_pages }}&per_page={{ per_page }}" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> {% else %} <li class="disabled"> <a href="" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> {% endif %} # 设置跳转 <li> <span id="x1"><input type="text" id="jump" size="2" title="输入页码,按回车快速跳转" placeholder="{{ page_num_int }}/ {{ paginator.num_pages }} 页" onkeydown="if(event.keyCode===13) {window.location='?page='+this.value+'&per_page={{ per_page }}'; doane(event);}"> </span> </li> # 设置分页个数 <li> <span id="x2"> <input type="text" id="per_page_num" size="2" placeholder=" 条数:{{ per_page }}" onkeydown="if(event.keyCode===13) {window.location='?page='+ '{{ page_num_int }}&per_page=' + this.value; doane(event);}"> </span> </li> </ul> </nav> </div> </div> </div> </div> </body> </html>
标签:paginator,分页,int,Django,range,num,print,page,入门 From: https://www.cnblogs.com/panwenbin-logs/p/16631748.html