• Django实现分页器功能


    要使用Django实现分页器,必须从Django中导入Paginator模块

    from django.core.paginator import Paginator

    假如现在有150条记录要显示,每页显示10条

     1 >>> from django.core.paginator import Paginator#导入Paginator模块
     2 >>> list1=[i for i in range(0,150)]#使用列表生成器生成一个包含150个数字的列表
     3 >>> page1=Paginator(list1,10)#生成一个Paginator对象
     4 >>> print(page1.count)#打印总的记录数,即列表list1的长度
     5 150
     6 >>> print(page1.num_pages)#打印总的页数,即总记录数除以每页显示的条目数
     7 15
     8 >>> print(page1.page_range)#页数的列表
     9 range(1, 16)
    10 >>> print(page1.page(1))#打印第一页的page对象
    11 <Page 1 of 15>
    12 >>> page1.page(1).object_list#打印第一页的所有记录
    13 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    14 >>> page1.page(2).object_list#打印第二页的所有记录
    15 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    16 >>> page1.page(2).next_page_number()#打印当前的页(第2页)的下一页的页码
    17 3
    18 >>> page1.page(2).has_next()#第2页是否有下一页
    19 True
    20 >>> page1.page(2).has_previous()#第2页是否有上一页
    21 True
    22 >>> page1.page(2).has_other_pages()#第2是否有其他页
    23 True
    24 >>> page1.page(2).start_index()#第2页第一条记录的序号
    25 11
    26 >>> page1.page(2).end_index()#第2页最后一条记录的序号
    27 20
    28 >>> page1.page(0)#第0页是否有记录,会报错
    29 Traceback (most recent call last):
    30   File "<stdin>", line 1, in <module>
    31     ...
    32     raise EmptyPage(_('That page number is less than 1'))
    33 django.core.paginator.EmptyPage: <exception str() failed>
    34 >>> page1.page(15)#打印第15页的对象
    35 <Page 15 of 15>

    例子,使用Django实现一个分页效果

    前端代码:

     1 {% load staticfiles %}
     2 <!DOCTYPE html>
     3 <html lang="en">
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>Title</title>
     7     <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.css' %}">
     8 </head>
     9 <body>
    10 <div class="container">
    11     <h4>分页器</h4>
    12     <ul>
    13         #遍历boot_list中的所有元素
    14         {% for book in book_list %}
    15             #打印书籍的名称和价格
    16             <li>{{ book.title }} {{ book.price }}</li>
    17         {% endfor %}
    18     </ul>
    19     <ul class="pagination" id="pager">
    20         {#上一页按钮开始#}
    21         {# 如果当前页有上一页#}
    22         {% if book_list.has_previous %}
    23             {#  当前页的上一页按钮正常使用#}
    24             <li class="previous"><a href="/?page={{ book_list.previous_page_number }}">上一页</a></li>
    25         {% else %}
    26             {# 当前页的不存在上一页时,上一页的按钮不可用#}
    27             <li class="previous disabled"><a href="#">上一页</a></li>
    28         {% endif %}
    29         {#上一页按钮结束#}
    30         {# 页码开始#}
    31         {% for num in paginator.page_range %}
    32 
    33             {% if num == currentPage %}
    34                 <li class="item active"><a href="/?page={{ num }}">{{ num }}</a></li>
    35             {% else %}
    36                 <li class="item"><a href="/?page={{ num }}">{{ num }}</a></li>
    37 
    38             {% endif %}
    39         {% endfor %}
    40         {#页码结束#}
    41         {# 下一页按钮开始#}
    42         {% if book_list.has_next %}
    43             <li class="next"><a href="/?page={{ book_list.next_page_number }}">下一页</a></li>
    44         {% else %}
    45             <li class="next disabled"><a href="#">下一页</a></li>
    46         {% endif %}
    47         {# 下一页按钮结束#}
    48     </ul>
    49 </div>
    50 </body>
    51 </html>
    View Code

    后端代码:

     1 #导入render和HttpResponse模块
     2 from django.shortcuts import render,HttpResponse
     3 
     4 #导入Paginator,EmptyPage和PageNotAnInteger模块
     5 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
     6 
     7 #从Django项目的应用中导入模块
     8 from app01.models import *
     9 
    10 def index(request):
    11 
    12     #获取Book数据表中的所有记录
    13     book_list=Book.objects.all()
    14 
    15     #生成paginator对象,定义每页显示10条记录
    16     paginator = Paginator(book_list, 10)
    17 
    18     #从前端获取当前的页码数,默认为1
    19     page = request.GET.get('page',1)
    20     
    21     #把当前的页码数转换成整数类型
    22     currentPage=int(page)
    23 
    24     try:
    25         print(page)
    26         book_list = paginator.page(page)#获取当前页码的记录
    27     except PageNotAnInteger:
    28         book_list = paginator.page(1)#如果用户输入的页码不是整数时,显示第1页的内容
    29     except EmptyPage:
    30         book_list = paginator.page(paginator.num_pages)#如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
    31 
    32     return render(request,"index.html",locals())
    View Code
     
  • 相关阅读:
    状态机的常见问题
    基于quartus的高级时序分析
    FPGA中的时钟域问题
    quartus中的时序约束常用方法
    时序约束与时序分析
    FPGA的PCB设计
    AXI4的主机协议代码分析
    selenium 笔记 场景判断
    Codeforces Round #676 (Div. 2) XORwice、Putting Bricks in the Wall、Palindromifier
    Trap HDU
  • 原文地址:https://www.cnblogs.com/magicking/p/8971695.html
Copyright © 2020-2023  润新知