• Django组件-分页器


    分页器(paginator)

    views.py

    from django.shortcuts import render
    
    from app01.models import Book
    
    from django.core.paginator import Paginator, EmptyPage
    
    def index(request):
        # 效率低,每次都要insert一下
        # for i in range(100):
        #     Book.objects.create(
        #         title=f'book_{i}',
        #         price=i * i'
        #     )
    
        # 批量导入,一条insert后面对应100条数据
        # book_list = []
        # for i in range(100):
        #     book = Book(title=f'book_{i}', price=i * i)
        #     book_list.append(book)
        #
        # Book.objects.bulk_create(book_list)
    
        book_list = Book.objects.all()
    
        # 分页器
        paginator = Paginator(book_list, 3)
        print("count:", paginator.count)  # 数据总数
        print("num_pages", paginator.num_pages)  # 总页数
        print("page_range", paginator.page_range)  # 页码的列表
    
        # 抛错
        # page=paginator.page(12)   # error:EmptyPage
    
        # page=paginator.page("z")   # error:PageNotAnInteger
    
        current_page_num = int(request.GET.get('page', 1))
    
        if paginator.num_pages > 11:
            if current_page_num - 5 < 1:
                page_range = range(1, 11)
            elif current_page_num + 5 > paginator.num_pages:
                page_range = range(paginator.num_pages - 10, paginator.num_pages + 1) # range顾头不顾尾
            else:
                page_range = range(current_page_num - 5, current_page_num + 6)
    
        else:
            page_range = paginator.page_range
        try:
    
            current_page = paginator.page(current_page_num)
    
            # 显示某一页具体数据的两种方式
            print('object_list', current_page.object_list)
            for i in current_page:
                print(i)
        except EmptyPage as e:
            current_page = paginator.page(1)
    
        # print(current_page.has_next())  # 是否有下一页
        # print(current_page.next_page_number())  # 下一页的页码
        # print(current_page.has_previous())  # 是否有上一页
        # print(current_page.previous_page_number())  # 上一页的页码
    
        return render(request, 'index.html', locals())

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
        <link rel="stylesheet" href="/static/bs/css/bootstrap.css">
    </head>
    <body>
    
    <ul>
        {% for book in current_page %}
            <li>{{ book.title }} : {{ book.price }}</li>
        {% endfor %}
    
    </ul>
    
    <nav aria-label="Page navigation">
        <ul class="pagination">
    
            {% if current_page.has_previous %}
                <li>
                    <a href="?page={{ current_page.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 %}
        
    
            {% for item in page_range %}
                {% if current_page_num == item %}
                    <li class="active"><a href="?page={{ item }}">{{ item }}</a></li>
                {% else %}
                    <li><a href="?page={{ item }}">{{ item }}</a></li>
                {% endif %}
            {% endfor %}
    
        
            {% if current_page.has_next %}
                <li>
                    <a href="?page={{ current_page.next_page_number }}" aria-label="Next">
                        <span aria-hidden="true">下一页</span>
                    </a>
                </li>
            {% else %}
                <li class="disabled">
                    <a href="" aria-label="Next">
                        <span aria-hidden="true">下一页</span>
                    </a>
                </li>
    
            {% endif %}
    
        </ul>
    </nav>
    
    </body>
    </html>

    扩展

    def index(request):
    
        book_list=Book.objects.all()
        paginator = Paginator(book_list, 15)
        page = request.GET.get('page',1)
        currentPage=int(page)
    
        #  如果页数十分多时,换另外一种显示方式
        if paginator.num_pages>11:
            if currentPage-5<1:
                pageRange=range(1,11)
            elif currentPage+5>paginator.num_pages:
                pageRange=range(currentPage-5,paginator.num_pages+1)
            else:
                pageRange=range(currentPage-5,currentPage+5)
        else:
            pageRange=paginator.page_range
        try:
            print(page)
            book_list = paginator.page(page)
        except PageNotAnInteger:
            book_list = paginator.page(1)
        except EmptyPage:
            book_list = paginator.page(paginator.num_pages)
    
        return render(request,"index.html",locals())
  • 相关阅读:
    Ubuntu 各版本代号简介
    Ubuntu如何同步网络时间
    Ubuntu下修改DNS重启也能用的方法
    provider networks和self-service networks
    openstack 架构
    系统故障排除
    系统日志管理
    系统引导
    网络管理
    Linux下开启FTP服务
  • 原文地址:https://www.cnblogs.com/hexiaorui123/p/10584454.html
Copyright © 2020-2023  润新知