• Django学习系列之django分页


    基本语法实例

    from django.core.paginator import Paginator 
    
    objects = Post.objects.filter(status='published') #从数据库中取出所有status=published状态的文章
    p = Paginator(objects,3)              #实例化Paginator对象,3条数据为一页
    print(p.count)                        #一共有多少条数据
    print(p.num_pages)                    #一共可以分为多少页
    page1 = p.page(1)                     #取第一页的数据
    page2 = p.page(2)                     #取第二页的数据
    
    print(page2.has_previous) #判断第二分页是否有前一页,有则返回True,否则False print(page2.has_next) #判断第二分页是否有下一页,有则返回Trur,否则False
    print(page2.previous_page_number) #返回上一页的页码,如果上一页不存在跑出InvalidPage异常 print(page2.next_page_number) #返回下一页的页码,如果下一页不存在抛出InvalidPage异常

    官方实例

    views.py

    from django.shortcuts import render,get_object_or_404
    from django.core.paginator import Paginator, PageNotAnInteger,EmptyPage
    # Create your views here.
    
    from blog.models import Post
    
    def post_list(request):
        object_list = Post.objects.filter(status='published')
        #每页显示3个
        paginator = Paginator(object_list,3)
        #获取前端传过来的要访问的页面数,比如说去第一页,就传过来1
        page = request.GET.get('page')
        print(page)
        try:
            #比如说第一页,就返回第一页的数据
            posts = paginator.page(page)
        except PageNotAnInteger:
            #如果传过来的页面数不是整数,就返回第一页
            posts = paginator.page(1)
        except EmptyPage:
            #如果传过来的页面数超出范围,就返回最有一夜
            posts = paginator.page(paginator.num_pages)
        return render(request,'blog/post/list.html',{'posts':posts})

    list.html

    <div class="pagination">
        <span class="step-links">
            #如果有上一页的话
            {% if posts.has_previous %}
                #发一个get请求到views.py的post_list函数,比如?page=1,就是127.0.0.1:8000/blog?page=1,去第一页的意思
                <a href="?page={{ posts.previous_page_number }}">上一页</a>
            {% endif %}
            <span class="current">
           #page 2 of 3,意思就是目前在第二页,一共有三页. post.number返回当前在第几页,num_pages返回一共有多少页 Page {{ posts.number }} of {{ posts.paginator.num_pages }}. </span> #如果有下一页的话 {% if posts.has_next %} #发一个get请求到views.py的post_list函数,比如?page=2,就是127.0.0.1:8000/blog?page=2,去第二页的意思 <a href="?page={{ posts.next_page_number }}">下一页</a> {% endif %} </span> </div>

    流程:

    ------->这个是效果图

    1. 假如目前在第2页,list.html中[if post.has_previous]判断有上一页,然后我们点击上一页按钮,就会发送一个GET请求到views.py的post_list函数,把上一页的页码数传给post_list函数,比如说页码数是1
    2. post_list函数通过[request.GET.get('page')]获取前端通过GET请求传过来的页码数,通过paginator.page(page),其实就是paginator.page(1)把第1页的数据返回并渲染list.html

  • 相关阅读:
    wqs二分
    FLAG区
    Codeforces | CF1033D 【Divisors】
    Nowcoder | [题解-N210]牛客OI月赛2-提高组
    Codeforces | CF1041F 【Ray in the tube】
    Nowcoder | [题解-N189]牛客OI赛制测试赛3
    Codeforces | CF1029F 【Multicolored Markers】
    Codeforces | CF1037D 【Valid BFS?】
    Codeforces | CF1028C 【Rectangles】
    Codeforces | CF1029C 【Maximal Intersection】
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/7090807.html
Copyright © 2020-2023  润新知