• Django的分页和中间件


    一、分页

    Django的分页器(paginator)

    view.py

    from django.shortcuts import render,HttpResponse

    # Create your views here.

    from app09 import models

    # 导入分页模块
    from django.core.paginator import Paginator
    # 做分页
    # 分页器的对象,需要传object_list(要分页的所有数据queryset对象), per_page(每页要显示的个数),

    def paginator(request):
    book_l = models.Book.objects.all().order_by('pk')
    paginator = Paginator(book_l, 40)

    try:
    #只写page,默认是none,我们默认是第一页。
    currentpage = int(request.GET.get('page',1))
    # page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页

    # 取出书的第一页,第一页的对象,page是每一页的对象
    # page = paginator.page(1)

    page = paginator.page(currentpage)
    except Exception as e:
    #如果输入法的不合法就显示第一页,就不会报错
    currentpage = 1
    page = paginator.page(currentpage)

    #传入页码数,拿到的就是当前页对象
    page = paginator.page(currentpage)

    # page_range = paginator.page_range


    #1 总页数是否大于11,当总页码数大于11时
    if paginator.num_pages >11:
    #1.1 当前页码数是否小于6
    if currentpage <=6:
    #1.1.1 当前页码数小于6的时候,就生成11个页码数
    page_range = range(1,12)
    #1.2 当前页码数+5大于总页码数
    elif currentpage + 5 >= paginator.num_pages:
    # 1.2.1 往后推11页页码数
    page_range = range(paginator.num_pages - 10,paginator.num_pages + 1)
    # 1.3 当前页码数大于6,就生成一个左5 右5的区间
    else:
    page_range = range(currentpage - 5,currentpage + 6)
    #2 总页码数不大于11的是有,页码有多少显示多少页码
    else:
    page_range = paginator.page_range




    # 总数据条数
    print('总数据条数', paginator.count)
    print('总页数', paginator.num_pages)

    # 需要在前端显示出来
    print('页码的列表', paginator.page_range)
    print('页码的列表', list(paginator.page_range))


    # page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页

    # 取出书的第一页,第一页的对象,page是每一页的对象
    # page = paginator.page(1)

    # page = paginator.page(currentpage)

    # 每次从这一页中拿出一个个的书
    # 在模板中for循环这个就可以拿出数据
    # for book in page:
    # print(book.name)
    # print(page.has_next()) #是否有下一页
    # print(page.next_page_number()) #是否有下一页的页码
    # print(page.has_previous()) #是否有上一页
    # print(page.previous_page_number()) #是否有上一页的页码

    # 去写模板

    return render(request, 'pagintaor.html', locals())



    def booklist(request):
    book_l = models.Book.objects.all()

    return HttpResponse('OK')





    # 批量生产数据
    # def createbook(request):
    # # 插入104本书(对象),先生成列表
    # li = []
    # for i in range(105):
    # li.append(models.Book(name='honglpimeng%s'%i,price=1+i))
    # res = models.Book.objects.bulk_create(li,20)
    #
    # return HttpResponse('OK')


    <><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><

    HTML
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    {# 引入bootstrap#}
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <title>Title</title>
    </head>
    <body>


    <table class="table table-bordered">
    <thead>
    <tr>
    <th>序号</th>
    <th>书名</th>
    <th>价格</th>
    </tr>
    </thead>
    <tbody>
    {% for book in page %}
    <tr>
    <td>{{ forloop.counter }}</td>
    <td>{{ book.name }}</td>
    <td>{{ book.price }}</td>
    </tr>

    {% endfor %}

    </tbody>

    </table>


    {#//加分页 让有多少页就显示多少页#}
    <nav aria-label="Page navigation">
    <ul class="pagination">
    {% if page.has_previous %}
    <li>
    {# <a href="/paginator/?page={{ page.previous_page_number }}" aria-label="Previous">#}
    <a href="/paginator/?page={{ 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 foo in page_range %}

    {% if currentpage == foo %}
    {# 变色,判断当前页面是不是循环到的页面,如果是加active#}
    <li class="active"><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li>

    {% else %}
    <li><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li>

    {% endif %}




    {% endfor %}

    {% if page.has_next %}
    <li>
    {# <a href="/paginator/?page={{ page.next_page_number }}" aria-label="Next">#}
    <a href="/paginator/?page={{ 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>



    <><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><




  • 相关阅读:
    Sencha touch 初体验
    Android开发——NDK开发入门
    Android开发——Activity(活动)的生命周期(上)
    Android开发——构建自定义组件【转】
    Android开发——使用Gallery实现“多级联动”
    Android开发——Android搜索框架(一)
    LINQ之路 6:延迟执行(Deferred Execution)
    .Net小笔记之.NET Framework的内容
    c#高级编程学习笔记之创建一个简化的链表类
    C#高级编程读书笔记之泛型的优点
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/10290215.html
Copyright © 2020-2023  润新知