一、分页
Django的分页器(paginator)
view.py
from django.shortcuts import render,HttpResponse # Create your views here. from app09 import models # 导入分页模块from django.core.paginator import Paginator# 做分页# 分页器的对象,需要传object_list(要分页的所有数据queryset对象), per_page(每页要显示的个数), def paginator(request): book_l = models.Book.objects.all().order_by(‘pk‘) paginator = Paginator(book_l, 40) try: #只写page,默认是none,我们默认是第一页。 currentpage = int(request.GET.get(‘page‘,1)) # page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页 # 取出书的第一页,第一页的对象,page是每一页的对象 # page = paginator.page(1) page = paginator.page(currentpage) except Exception as e: #如果输入法的不合法就显示第一页,就不会报错 currentpage = 1 page = paginator.page(currentpage) #传入页码数,拿到的就是当前页对象 page = paginator.page(currentpage) # page_range = paginator.page_range #1 总页数是否大于11,当总页码数大于11时 if paginator.num_pages >11: #1.1 当前页码数是否小于6 if currentpage <=6: #1.1.1 当前页码数小于6的时候,就生成11个页码数 page_range = range(1,12) #1.2 当前页码数+5大于总页码数 elif currentpage + 5 >= paginator.num_pages: # 1.2.1 往后推11页页码数 page_range = range(paginator.num_pages - 10,paginator.num_pages + 1) # 1.3 当前页码数大于6,就生成一个左5 右5的区间 else: page_range = range(currentpage - 5,currentpage + 6) #2 总页码数不大于11的是有,页码有多少显示多少页码 else: page_range = paginator.page_range # 总数据条数 print(‘总数据条数‘, paginator.count) print(‘总页数‘, paginator.num_pages) # 需要在前端显示出来 print(‘页码的列表‘, paginator.page_range) print(‘页码的列表‘, list(paginator.page_range)) # page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页 # 取出书的第一页,第一页的对象,page是每一页的对象# page = paginator.page(1) # page = paginator.page(currentpage) # 每次从这一页中拿出一个个的书# 在模板中for循环这个就可以拿出数据# for book in page: # print(book.name) # print(page.has_next()) #是否有下一页 # print(page.next_page_number()) #是否有下一页的页码 # print(page.has_previous()) #是否有上一页 # print(page.previous_page_number()) #是否有上一页的页码 # 去写模板 return render(request, ‘pagintaor.html‘, locals()) def booklist(request): book_l = models.Book.objects.all() return HttpResponse(‘OK‘) # 批量生产数据# def createbook(request):# # 插入104本书(对象),先生成列表# li = []# for i in range(105):# li.append(models.Book(name=‘honglpimeng%s‘%i,price=1+i))# res = models.Book.objects.bulk_create(li,20)## return HttpResponse(‘OK‘) <><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><>< HTML
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> {# 引入bootstrap#} <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> <title>Title</title></head><body> <table class="table table-bordered"> <thead> <tr> <th>序号</th> <th>书名</th> <th>价格</th> </tr> </thead> <tbody> {% for book in page %} <tr> <td>{{ forloop.counter }}</td> <td>{{ book.name }}</td> <td>{{ book.price }}</td> </tr> {% endfor %} </tbody> </table> {#//加分页 让有多少页就显示多少页#}<nav aria-label="Page navigation"> <ul class="pagination"> {% if page.has_previous %} <li>{# <a href="/paginator/?page={{ page.previous_page_number }}" aria-label="Previous">#} <a href="/paginator/?page={{ page.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 %} {% for foo in page_range %} {% if currentpage == foo %} {# 变色,判断当前页面是不是循环到的页面,如果是加active#} <li class="active"><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li> {% else %} <li><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li> {% endif %} {% endfor %} {% if page.has_next %} <li>{# <a href="/paginator/?page={{ page.next_page_number }}" aria-label="Next">#} <a href="/paginator/?page={{ page.next_page_number }}" 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 %} </ul></nav> </body></html>
<><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><
原文地址:https://www.cnblogs.com/zhangrenguo/p/10290215.html
时间: 2024-10-02 10:52:59