Django的分页器(paginator)
首先你要先导入Paginator
from django.core.paginator import Paginator
你要再创建分页对象 然后通过这个对象来调用分页的所有的属性
paginator = Paginator(book_list, 2) #设置每一页显示几条 创建一个panginator对象
属性:
print(Paginator.count) #总数据量 print(Paginator.num_pages) #分页数 print(Paginator.page_range) #显示的是页数的标记 就是按钮的数目
print(page2.has_next()) #是否有下一页 print(page2.next_page_number()) #下一页的页码 print(page2.has_previous()) #是否有上一页 print(page2.previous_page_number()) #上一页的页码
print(paginator.count) #通过你创建的对象来调用pangnator的属性 这个是统计总数 print(paginator.num_pages) #因为你上面设置了每一页显示两条 这个分页就会是总数除去每一页的显示的数量 print(paginator.page_range) book_list = paginator.page(1) #这个是对你的分页的数据进行取值 去除你的分过后的第一页 # book_list , paginator.page是取你的分页后的某一页 print(book_list)
做一个分页的演示
urls:
from django.contrib import admin from django.urls import path from one import views urlpatterns = [ path('admin/', admin.site.urls), # path('login/',views.login,name = 'login'), # path('index/' ,views.index, name='index' ), # path('add/',views.adduser, name='add'), # path('logout/',views.logout) path('index/',views.index), ]
views:
from one.models import Book from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def index(request): # book_list = [] # for i in range(100): # # # book = Book(title = 'book_%s'%i,price = i*i) # # book_list.append(book) # book = Book(title = 'book_%s'%i,price = i*i) # book_list .append(book) # # Book.objects.bulk_create(book_list) #builk_create 是批量创建数据 # print(Paginator.count) #总数据量 # print(Paginator.num_pages) #分页数 # print(Paginator.page_range) #显示的是页数的标记 就是按钮的数目 book_list = Book.objects.all() paginator = Paginator(book_list, 2) #设置每一页显示几条 创建一个panginator对象 # try: # current_num = int(request.GET.get('page',1)) # # book_list = paginator.page(current_num) # print(paginator.count) #通过你创建的对象来调用pangnator的属性 这个是统计总数 # print(paginator.num_pages) #因为你上面设置了每一页显示两条 这个分页就会是总数除去每一页的显示的数量 # print(paginator.page_range) # book_list = paginator.page(1) #这个是对你的分页的数据进行取值 去除你的分过后的第一页 # # book_list , paginator.page是取你的分页后的某一页 # print(book_list) book_list = Book.objects.all() paginator = Paginator(book_list, 2) # 设置每一页显示几条 创建一个panginator对象 try: current_num = int(request.GET.get('page',2)) #当你在url内输入的?page = 页码数 显示你输入的页面数目 默认为第2页 book_list = paginator.page(current_num) except EmptyPage: book_list = paginator.page(4) #当你输入的page是不存在的时候就会报错 if paginator.num_pages > 11: # 如果分页的数目大于11 if current_num - 5 < 1: # 你输入的值 pageRange = range(1, 11) # 按钮数 elif current_num + 5 > paginator.num_pages: # 按钮数加5大于分页数 pageRange = range(current_num - 5, current_num + 1) # 显示的按钮数 else: pageRange = range(current_num - 5, current_num + 6) # range求的是按钮数 如果你的按钮数小于分页数 那么就按照正常的分页数目来显示 else: pageRange = paginator.page_range() # 正常分配 return render(request,'index_one.html',locals())
index:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.1.0/css/bootstrap.css"> </head> <body> <h3>INDEX</h3> <ul> {% for book in book_list %} <li>{{ book.title }}---{{ book.price }}</li> {% endfor %} </ul> <nav aria-label="Page navigation"> <ul class="pagination"> {% if book_list.has_previous %} <li><a href="?page={{ book_list.previous_page_number }}" 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 %} {# disabled是当你的按钮不满足的时候不可以点击了#} {% for i in pageRange %} {% if current_num == i %} <li class="active"><a href="?page={{ i }}">{{ i }}</a></li> {% else %} <li><a href="?page={{ i }}">{{ i }}</a></li> {% endif %} {% endfor %} <li> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> </body> </html>