zoukankan      html  css  js  c++  java
  • 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),
    
    ]
    View Code

    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())
    Views

    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">&raquo;</span>
          </a>
        </li>
      </ul>
    </nav>
    
    </body>
    </html>
    index
  • 相关阅读:
    你所不知道的 CSS 阴影技巧与细节
    %date~0,4%和 %time~0,2%等用法详解
    计算程序执行时间
    GDI
    IO
    字符串拼凑批量Insert SQL语句神BUG
    用逗号分隔的数据转换到数组
    MVC ViewBag传值
    接口和抽象类对比
    Partial 同一个命名空间下写两个类名一样的类
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/9287660.html
Copyright © 2011-2022 走看看