zoukankan      html  css  js  c++  java
  • django的分页器

    Django中分页器的使用

    django分页器模块

    #分页器
    from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger

    分页器常用方法:

    def index(request):
        book_list=Book.objects.all()
        #实例化分页器对象,第二个对象是每页最大条数
        paginator=Paginator(book_list,21)
        #三个静态方法
        print('count',paginator.count)   #数据总数
        print('num_pages',paginator.num_pages)   #总页数
        print('page_range',paginator.page_range)    #页码范围,相当于(1,总页数+1)
        #取某一页的page对象
        page1=paginator.page(1)    #第一页的page对象
        #遍历第一页的数据对象的两种方式
        for i in page1:
            print(i)
        print(page1.object_list)
    
        page2=paginator.page(2)
        print(page2.has_next())   #是否有下一页
        print(page2.next_page_number())   #下一页的页码
        print(page2.has_previous())    #是否有上一页
        print(page2.previous_page_number())    #上一页页码
    
        return render(request,'index.html',locals())

    正式建一个分页器:

    views:

    from django.shortcuts import render,redirect
    from .models import *
    #分页器
    from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
    # Create your views here.
    
    def add(request):
        #数据库批量添加
        book_list=[]
        for i in range(500):
            book_obj=Book(title='book%s'%i,price=i)
            book_list.append(book_obj)
        Book.objects.bulk_create(book_list)
        return redirect('/index/')
    
    def index(request):
    
        current_page_num=int(request.GET.get('page',1))
        book_list = Book.objects.all()
        paginator=Paginator(book_list,11)
        page=paginator.page(current_page_num)

    html(利用bootstrap框架):

    <body>
    <ul>
    {% for book in page %}
    <li>{{ book.pk }}--{{ book.title }}--{{ book.price }}</li>
    {% endfor %}
    </ul>
    <nav aria-label="Page navigation">
        <ul class="pagination">
            <li>
                <a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">上一页</a>
            </li>
            {% for num in paginator.page_range %}
                {% if current_page_num == num %}
                    <li class="active">
                        <a href="?page={{ num }}">{{ num }}</a>
                    </li>
                {% else %}
                    <li>
                        <a href="?page={{ num }}">{{ num }}</a>
                    </li>
                {% endif %}
            {% endfor %}
    {#        下一页#}
            {% if page.has_next %}
                <li>
                    <a href="?page={{ current_page_num|add:1 }}" aria-label="Next">下一页</a>
                </li>
                {% else %}
                <li class="disabled">
                    <a href="#" aria-label="Next">下一页</a>
                </li>
            {% endif %}
    
        </ul>
    </nav>
    
    </body>

     页数比较多时,不一一显示:

    可以加一段逻辑

    def index(request):
        current_page_num=int(request.GET.get('page',1))
        book_list = Book.objects.all()
        paginator=Paginator(book_list,11)
        num_pages=paginator.num_pages
        #总页数过多时,不一一显示
        if num_pages>11:
            if current_page_num<6:
                page_range=range(1,12)
            elif current_page_num>num_pages-5:
                page_range=range(num_pages-10,num_pages+1)
            else:
                page_range=range(current_page_num-5,current_page_num+6)
        else:
            page_range=paginator.page_range
        page=paginator.page(current_page_num)
  • 相关阅读:
    ubuntu16.04本地软件源搭建
    2080TI显卡ubuntu16.04机器学习安装和克隆
    PLSQL导入excel数据方法
    只有英伟达显卡输出口的电脑安装ubuntu系统记录
    百度人脸识别学习
    http application/x-www-form-urlencoded 模式响应学习
    JS中继承的几种实现方式
    浅拷贝和深拷贝
    防抖和节流
    HTML知识点总结
  • 原文地址:https://www.cnblogs.com/hantaozi430/p/8796068.html
Copyright © 2011-2022 走看看