1 from django.shortcuts import render, HttpResponse 2 3 # Create your views here. 4 from django.core.paginator import Paginator, EmptyPage 5 from app01 import models 6 7 8 # def index(request): 9 # # 你们 写: 10 # # for i in range(100): 11 # # models.Book.objects.create(name=‘图书%s‘%i,price=10+i) 12 # # 我写和以后你们写(批量插入) 13 # # 先造成100本书,放到列表中 14 # # ll=[] 15 # # for i in range(100): 16 # # ll.append(models.Book(name=‘图书%s‘%i,price=10+i)) 17 # # # 批量插入,两个参数,第一个是对象列表,第二个是一次插入的数据量,不填,默认一次全插入 18 # # models.Book.objects.bulk_create(ll) 19 # 20 # # 查询所有图书 21 # book_list=models.Book.objects.all() 22 # # 分页器--类 23 # # 实例化产生一个对象 24 # # 两个参数:object_list:对象列表, per_page:每页显示的条数 25 # paginator=Paginator(book_list,10) 26 # # 对象内的属性 27 # # 数据总条数100条 28 # # print(paginator.count) 29 # # # 总页数 10页 30 # # print(paginator.num_pages) 31 # # # 页码数的列表 32 # # print(paginator.page_range) 33 # # # 取到第 x 页 ,返回一个Page对象 34 # # current_page=paginator.page(5) 35 # # # 当前页码内所有的数据 36 # # print(current_page.object_list) 37 # # # 是否有下一页 38 # # print(current_page.has_next()) 39 # # # 是否有上一页 40 # # print(current_page.has_previous()) 41 # # # 下一页页码数 42 # # print(current_page.next_page_number()) 43 # # # 上一页的页码数 44 # # print(current_page.previous_page_number()) 45 # 46 # 47 # return render(request,‘index.html‘,locals()) 48 49 # def index(request): 50 # book_list = models.Book.objects.all() 51 # 52 # paginator = Paginator(book_list, 3) 53 # # 当前页码 54 # try: 55 # current_page_num = int(request.GET.get(‘page‘)) 56 # current_page = paginator.page(current_page_num) 57 # # 当前页码所有数据 58 # print(current_page.object_list) 59 # # 即可以循环current_page.object_list,又可以循环当前页的对象 60 # # for item in current_page: 61 # # print(item.name) 62 # # except EmptyPage as e: 63 # # # 捕获异常后,跳到第一页 64 # # current_page_num = 1 65 # # current_page = paginator.page(current_page_num) 66 # except Exception as e: 67 # current_page_num = 1 68 # current_page = paginator.page(current_page_num) 69 # 70 # return render(request, ‘index.html‘, locals()) 71 72 def index(request): 73 book_list = models.Book.objects.all() 74 paginator = Paginator(book_list, 3) 75 # 如果页码数多,让它显示前5,后5,中间是当前在的页码 76 try: 77 78 current_page_num = int(request.GET.get(‘page‘)) 79 current_page = paginator.page(current_page_num) 80 print(current_page.object_list) 81 # 总页码数,大于11的时候 82 if paginator.num_pages >11: 83 # 当前页码数-5大于1的时候,page_range应该是? 84 if current_page_num-5<1: 85 page_range=range(1,12) 86 elif current_page_num+5>paginator.num_pages: 87 # 当前页码数+5大于总页码数,总页码数往前推11个 88 page_range=range(paginator.num_pages-10,paginator.num_pages+1) 89 else: 90 page_range = range(current_page_num - 5, current_page_num + 6) 91 else: 92 #小于11,有多少页,就显示多少页 93 page_range=paginator.page_range 94 except Exception as e: 95 current_page_num = 1 96 current_page = paginator.page(current_page_num) 97 98 return render(request, ‘index_next.html‘, locals())
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <!-- 最新版本的 Bootstrap 核心 CSS 文件 --> 6 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" 7 integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 8 <title>Title</title> 9 </head> 10 <body> 11 <div class="row"> 12 <div class="col-md-6 col-md-offset-3"> 13 14 <table class="table table-striped"> 15 <thead> 16 <tr> 17 <th>书名</th> 18 <th>价格</th> 19 </tr> 20 </thead> 21 <tbody> 22 {% for book in current_page %} 23 <tr> 24 <td>{{ book.name }}</td> 25 <td>{{ book.price }}</td> 26 </tr> 27 {% endfor %} 28 29 </tbody> 30 </table> 31 <nav aria-label="Page navigation"> 32 <ul class="pagination"> 33 {% if current_page.has_previous %} 34 <li> 35 {# <a href="/index/?page={{ current_page_num|add:-1 }}" aria-label="Previous">#} 36 <a href="/index/?page={{ current_page.previous_page_number }}" aria-label="Previous"> 37 <span aria-hidden="true">上一页</span> 38 </a> 39 </li> 40 {% else %} 41 <li class="disabled"> 42 <a href="" aria-label="Previous"> 43 <span aria-hidden="true">上一页</span> 44 </a> 45 </li> 46 {% endif %} 47 48 {% for foo in page_range %} 49 {% if current_page_num == foo %} 50 {# 当前页码等于循环到的页码数,变色#} 51 <li class="active"><a href="/index/?page={{ foo }}">{{ foo }}</a></li> 52 {% else %} 53 <li><a href="?page={{ foo }}">{{ foo }}</a></li> 54 {% endif %} 55 56 {% endfor %} 57 58 59 60 {% if current_page.has_next %} 61 <li> 62 {# <a href="/index/?page={{ current_page_num|add:1 }}" aria-label="Next">#} 63 <a href="/index/?page={{ current_page.next_page_number }}" aria-label="Next"> 64 <span aria-hidden="true">下一页</span> 65 </a> 66 </li> 67 {% else %} 68 <li class="disabled"> 69 <a href="" aria-label="Next"> 70 <span aria-hidden="true">下一页</span> 71 </a> 72 </li> 73 {% endif %} 74 </ul> 75 </nav> 76 </div> 77 78 </div> 79 </body> 80 </html>
原文:https://www.cnblogs.com/xuqidong/p/12089094.html