zoukankan      html  css  js  c++  java
  • Django 在 view 中使用 Paginator分页插件

    1、在 view 中使用 Paginator

    def query(request,sql):
    # 创建连接
    connection = pymysql.connect(**config)
    try:
    with connection.cursor() as cursor:
    # 执行sql语句,插入记录
    cursor.execute(sql);
    boxdic =cursor.fetchall()
    # 没有设置默认自动提交,需要主动提交,以保存所执行的语句
    connection.commit()
    finally:
    connection.close();
    objects = list(boxdic)
    #默认每页40条,前端可以修改每页条数
    pageSize = 40
    if(request.GET.get('pageSize')):
    if(request.GET.get('pageSize').isdigit()):
    pageSize = request.GET.get('pageSize')
    paginator = Paginator(objects, pageSize)

    #取页码数
    page = request.GET.get('page')
    try:
    pagedata = paginator.page(page) # contacts为Page对象!
    except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    pagedata = paginator.page(1)
    except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.
    pagedata = paginator.page(paginator.num_pages)
    return render(request, 'list.html', {'pagedata': pagedata,
    'title': title,
    'static_path_pre': STATIC_PATH_PRE
    })

    2、在模板(list.html)中的相关操作
    <div class="con" >
    <ul class="pager">
    共 {{ pagedata.paginator.count}} 条
    <form class="changePage">每页: <input type="text" class="pageSize" name="pageSize" onkeyup="submitForm(e)" value="{{ pagedata.paginator.per_page}}"/>
    <input type="submit" value="提交" id="SubmitPageBtn" style="display: none;"/></form>
    <li><a href="?page=1&pageSize={{ pagedata.paginator.per_page}}">首页</a></li>
    <form method="post" action="{{ request.path }}" class="ShowOutput"> {% csrf_token %} <input type="submit" class="btn btn-success" value="导出" /></form>

    {% if pagedata.has_previous %}
    <li><a href="?page=1&pageSize={{ pagedata.paginator.per_page}}&pageSize={{ pagedata.paginator.per_page}}">首页</a></li>
    <li><a href="?page={{ pagedata.previous_page_number }}&pageSize={{ pagedata.paginator.per_page}}"> 上一页 </a></li>
    {% endif %}
    <li class="active"><a href="#">{{ pagedata.number }}/{{ pagedata.paginator.num_pages}} </a></li>
    {% if pagedata.has_next %}
    <li> <a href="?page={{ pagedata.next_page_number }}&pageSize={{ pagedata.paginator.per_page}}">下一页 </a></li>
    <li><a href="?page={{ pagedata.paginator.num_pages }}&pageSize={{ pagedata.paginator.per_page}}"> 末页 </a></li>
    {% endif %}

    </ul>
    </div>



    补充:Paginator的方法属性(转)翻译自官方文档

    Paginator构造函数:
    [python] view plain copy
    1. Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)  

    A、必传参数

    object_list

    一个list,tuple,django的QuerySet,或者拥有``count()``或``__len__()``方法的 可分解对象。

    per_page

    每一页最大的对象个数。

    B、可选参数

    orphans

    最后一页对象的最少数目,默认为0。 如果想避免最后一页显示太少。则可以使用这个值。 那么最后一页的数据,自动被前移一页。比如总共23个数据。每页显示 10. orphans=3 那么,第一页为10,第二页为13.

    allow_empty_first_page

    表示首页是否可以为空,如果是 False 而且``object_list`` 为空,那么会触发 EmptyPage 异常。

    方法

     

    [python] view plain copy
     
    1. Paginator.page(number)  

    根据索引number,返回一个’Page’对象,如果不存在,引起 InvalidPage异常

     

    C、Paginator属性

    [python] view plain copy
     
    1. Paginator.count  

    所有对象的总数, 尝试通过``object_list.count()``和``object_list.__len__()`` 取得

    [python] view plain copy
    1. Paginator.num_pages  

    总共的页数

     

    [python] view plain copy
     
    1. Paginator.page_range  

    页的范围,比如 [1, 2, 3, 4] 。

    [python] view plain copy
     
    1. Paginator.per_page  

    每页的数据个数



    InvalidPage 异常

    当页面不存在或者无效时,会引起``InvalidPage``异常,一般这个异常就够用,如果需要更 详细信息,还有``PageNotAnInteger``,``EmptyPage``可用:

    PageNotAnInteger 异常

    page() 的参数非整数。

    EmptyPage

    page(x) ,第x页没数据。

    上述两个都是 InvalidPage 的子类。 用一个简单的 except InvalidPage 就可以处理。

     

     

    Page 类

    Page(object_list, number, paginator):

    一般不需用户自己构造,通过`Paginator.page` 生成。Paginator.page(number) 返回number的Page对象

    A、方法

    [python] view plain copy
     
    1. Page.has_next()  

    如果下一页存在,返回True。

    [python] view plain copy
     
    1. Page.has_previous()  

    如果前一页存在返回 True

     

    [python] view plain copy
     
    1. Page.has_other_pages()  

    如果上一页面或者下一页存在,返回``True``

     

    [python] view plain copy
     
    1. Page.next_page_number()  

    返回下一页的索引,这个函数比较傻(不管下一页是否存在,都是简单的+1)

     

    [python] view plain copy
     
    1. Page.previous_page_number()  

    返回上一页的索引,其他同上

     

    [html] view plain copy
     
    1. Page.start_index()  

    返回当前页,第一个对象的索引。

    [python] view plain copy
     
    1. Page.end_index()  

    道理同上。

     

    B、属性

    Page.object_list

    当前页对象列表

    Page.number

    当前页的索引

     

    具体举例

    [python] view plain copy
    1. >>> from django.core.paginator import Paginator  
    2. >>> objects = ['john', 'paul', 'george', 'ringo']  
    3. >>> p = Paginator(objects, 2)  
    [python] view plain copy
    1. >>> p.count  
    2. 4  
    3. >>> p.num_pages  
    4. 2  
    5. >>> p.page_range  
    6. [1, 2]  
    7. >>>p.per_page
    8. 2
    [python] view plain copy
    1. >>> page1 = p.page(1)  
    2. >>> page1  
    3. <Page 1 of 2>  
    4. >>> page1.object_list  
    5. ['john', 'paul']  
    [python] view plain copy
    1. >>> page2 = p.page(2)  
    2. >>> page2.object_list  
    3. ['george', 'ringo']  
    4. >>> page2.has_next()  
    5. False  
    6. >>> page2.has_previous()  
    7. True  
    8. >>> page2.has_other_pages()  
    9. True  
    10. >>> page2.next_page_number()  
    11. 3  
    12. >>> page2.previous_page_number()  
    13. 1  
    14. >>> page2.start_index() # The 1-based index of the first item on this page  
    15. 3  
    16. >>> page2.end_index() # The 1-based index of the last item on this page  
    17. 4  

     

    [python] view plain copy
     
    1. >>> p.page(0)  
    2. ...  
    3. EmptyPage: That page number is less than 1  
    4. >>> p.page(3)  
    5. ...  
    6. EmptyPage: That page contains no results  
    7. Note  
    
    

    在视图中使用 Paginator¶,如上list.html 

  • 相关阅读:
    (三)java程序的编译和执行
    (二)java环境搭建
    (一)java概述
    (一)mvc与mvvm设计模式
    小程序 开发之向左滑动实现删除功能
    小程序开发之三级联动
    (效果五)js获取客户端ip地址及浏览器信息
    (六)js常见四大排序
    小程序开发之组件的使用
    Nodejs实现爬虫抓取数据
  • 原文地址:https://www.cnblogs.com/yoyo008/p/9232603.html
Copyright © 2011-2022 走看看