zoukankan      html  css  js  c++  java
  • Django 分页器

    分页器:配合bootstarp中的分页器使用

    views.py

    from django.shortcuts import render
    from app01.models import Book
    from django.core.paginator import Paginator, EmptyPage
    
    
    # Create your views here.
    
    def index(request):
        '''
          批量插入
    
    
           booklist =[]
           for i in range(10000):
               book = Book(name='book%s'%i,price=i*i)
               booklist.append(book)
           Book.objects.bulk_create(booklist) #批量插入,相当于insert后面有10000条记录,而不是一万条insert
    
          :param request:
          :return:
          '''
        books = Book.objects.all()
        pagetor = Paginator(books, 2)  # Paginator(分页对象,每个分页中的数据数量)
        # 总页数
        print('总页数:', pagetor.num_pages)
        # 数据总数量
        print('数据总数:', pagetor.count)
        # 页码列表,顾头不顾尾,可以配合bootstrap的分页器使用
        print('页码列表:', pagetor.page_range)
    
        # 查看某一页的数据,对应html中for book in page
        # page = pagetor.page(1)
        '''如果我们打开http://127.0.0.1:8000/index/,那么第一次的get请求是没有任何参数的.默认的request.GET.get('page'),就是空.
        是无法进行看看页面数据的.一般index都是查看的第一页数据,我们给一个默认值1,即可.查看其它页面可以使用:index/?page=2这样的方式
        '''
    
    
        ''' 分页思路流程:
        默认当前页是第一页.
        如果总页数小于我们设置的show_pages,那么分页数就等于页码列表pagetor.page_range.
        如果总页数大于show_pages,分3种情况
        1.如果当前页面减去show_pages/2<1,那么分页列表就是(1,show_pages),不然分页会显示负数.
        2.如果当前页面加上show_pages/2 大于总页数,那么分页列表就是(总页数-show_pages,总页数+1)
        3.如果当前页面都不符合上面的条件(当前页面属于一个中间值,减去既不会小于0且又不大于总页数),
        那么分页列表就是(当前页面-show_page/2,当前页面+show_pages/2)
        
        
        
        
        '''
    
    
    
        current_page_num = int(request.GET.get('page', 1))
        show_pages = 11
        if pagetor.num_pages >show_pages:
            print("总页数大于11页")
            if current_page_num-5 <1:
                page_list = range(1,show_pages)
            elif current_page_num+5 >pagetor.num_pages:
                print("当前页数大于5")
                page_list =range(pagetor.num_pages-10,pagetor.num_pages+1)
            else:
                page_list =range(current_page_num-5,current_page_num+6)
        else:
            page_list =pagetor.page_range
    
    
    
    
    
        #     print('当前页码:',current_page_num)
        #     if current_page_num -5 <1:
        #         page_range= range(1,11)
        #     elif current_page_num+5 >pagetor.num_pages:
        #         page_range = range(current_page_num-5,pagetor.num_pages+1)
        #     else:
        #         page_range =range(current_page_num-5,current_page_num+5)
        # else:
        #     page_range = pagetor.page_range
    
    
    
    
    
        try:
            print('GET内容', request.GET)
            # current_page_num = int(request.GET.get('page', 1))
            print('当前页:',current_page_num)
            # print("page_range",page_range)
            # 获取页面对象,用来展示页面内容的,和分页无关
            page_range = pagetor.page(current_page_num)
            print("page_range:",page_range)
            '''
            以下4个分页对象的属性,可以配合bootstrap的分页器来使用,用来定义上一页或者下一页的页码
            '''
            # 是否有上一页
            # print("是否有上一页:", current_page.has_previous())
            # # 上一页页码
            # print('上一页页码:', current_page.previous_page_number())
            # # 是否有下一页
            # print("是否有下一页:", current_page.has_next())
            # # 下一页页码
            # print("下一页页码:",current_page.next_page_number())
    
        except EmptyPage as  e:
            # print('页码不正确,即将返回首页!')
            error = True
    
            index_page = pagetor.page(1)
    
        return render(request, 'index.html', locals())

    index.html

    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
        <meta charset="UTF-8">
        <title>Django分页器</title>
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
              integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    </head>
    
    
    <body>
    {#查某一页的数据#}
    {#<ul style=" 200px; margin: 0 auto">#}
    {#{% for book in page %}#}
    {#        <li>{{ book.name }}:{{ book.price }}</li>#}
    {#{% endfor books%}#}
    {#</ul>#}
    
    
    {#{% if error %}#}
    {#    <script>#}
    {#        alert('页码不正确,即将返回首页!')#}
    {##}
    {#    </script>#}
    {#    <ul style=" 200px; margin: 0 auto">#}
    {#        {% for book in index_page %}#}
    {#            <li>{{ book.name }}:{{ book.price }}</li>#}
    {#        {% endfor books %}#}
    {#    </ul>#}
    {#{% else %}#}
    {#    <ul style=" 200px; margin: 0 auto">#}
    {#        {% for book in current_page %}#}
    {#            <li>{{ book.name }}:{{ book.price }}</li>#}
    {#        {% endfor books %}#}
    {#    </ul>#}
    {##}
    {#{% endif %}#}
    
    
     <ul style=" 200px; margin: 0 auto">
            {% for book in page_range %}
                <li>{{ book.name }}:{{ book.price }}</li>
            {% endfor books %}
        </ul>
    <div class="page" style="margin: 0 auto; 33%">
        <nav aria-label="Page navigation">
            <ul class="pagination">
                {#        判断是否有上一页#}
                {% if page_range.has_previous %}
                    <li><a href="?page={{ page_range.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 page_num in page_list %}
                    {% if current_page_num == page_num %}
                        <li class="active"><a href="?page={{ page_num }}">{{ page_num }}</a></li>
                    {% else %}
                        <li><a href="?page={{ page_num }}">{{ page_num }}</a></li>
                    {% endif %}
                {% endfor %}
                {#        判断是否有下一页#}
                {% if page_range.has_next %}
                    <li><a href="?page={{ page_range.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>
    
    </div>
    </body>
    </html>
  • 相关阅读:
    Java抓取网页数据(原网页+Javascript返回数据)
    jvm调优
    Windows系统下nodejs安装及配置
    《学习opencv》笔记——矩阵和图像操作——cvCalcCovarMatrix,cvCmp and cvCmpS
    数据结构与算法一
    Oracle Hints具体解释
    hibernate-4.3.5安装配置
    linux-多线程
    利用JasperReport+iReport进行Web报表开发
    linux下tar.xz 文件解压
  • 原文地址:https://www.cnblogs.com/lovepy3/p/10948992.html
Copyright © 2011-2022 走看看