django中的Paginator分类

当页面数据过多时我们需要对数据进行分页处理,django中提供了Paginator类进行分页处理。很方便。
分页作用:提高用户体验;提高应用的速度

引入:
from django.core.paginator import Paginator

创建分页对象
all_articles = models.Article.objects.all().order_by('id')   #获取全部文章数据
page_obj = Paginator(all_articles,5)  #通过django自带的分页器进行分页 每页5条数据

Paginator对象提供的方法:
print('文章一共有多少数据',page_obj.count) #文章一共有多少数据
print('一共分了多少页',page_obj.num_pages)  #返回总页数  一共分了多少页
print('页码列表',page_obj.page_range)  #页码列表  range对象

数据集提供的方法:
    page_data = page_obj.get_page(2)   #获取第几页的数据集
    print(page_data.has_other_pages())  #是否有上一页或下一页
    print(page_data.has_next())  #是否有下一页
    print(page_data.has_previous()) #是否有上一页
    print(page_data.next_page_number()) #下一页页码值
    print(page_data.previous_page_number())#上一页页码值
    print('起始',page_data.start_index())  #返回当前页起始的对象序号
    print('结束',page_data.end_index()) #返回当前结束页的对象序号
    print(page_data.number)  #当前页

views.py

def index(request):
    page = request.GET.get('page')
    print('页面传来的参数',page)
    articles = models.Article.objects.all()
    # 创建分页实例, articles是文章所有数据,第二个参数代表每页展示多少条数据
    page_obj = Paginator(articles, 5)
    # print('文章一共有多少数据',page_obj.count) #文章一共有多少数据
    # print('一共分了多少页',page_obj.num_pages)  #返回总页数  一共分了多少页
    # print('页码列表',page_obj.page_range)  #页码列表  range对象


    # 数据集提供的方法:
    # page_data是某一页的数据集合对象
    page_data = page_obj.get_page(page)   #获取第几页的数据集
    # print(page_data.has_other_pages())  #是否有上一页或下一页
    # print(page_data.has_next())  #是否有下一页
    # print(page_data.has_previous()) #是否有上一页
    # print(page_data.next_page_number()) #下一页页码值
    # print(page_data.previous_page_number())#上一页页码值
    # print('起始',page_data.start_index())  #返回当前页起始的对象序号
    # print('结束',page_data.end_index()) #返回当前结束页的对象序号
    # print(page_data.number)  #当前页
    return render(request,'index.html',{'articles':page_data,'page_obj':page_obj})

index.html

                {% if articles.has_other_pages %}
                <div class="text-center mt-2 mt-sm-1 mt-md-0 mb-3 f-16">
                    {% if articles.has_previous  %}
                        <span class="text-secondary" title="当前页已经是首页"><a href="/articles?page={{articles.previous_page_number}}">上一页</a></span>
                    {% endif%}
                    {% for num in page_obj.page_range %}
                        {% if num == articles.number %}
                            <span class="mx-2" style="background-color: #20c997"><a href="/articles?page={{num}}">{{num}}</a></span>
                        {% else %}
                        <span class="mx-2">{{num}}</span>
                        {% endif %}
                    {% endfor %}

                    {% if articles.has_next %}
                    <a class="text-success" href="/articles?page={{articles.next_page_number}}">下一页</a>
                    {% endif %}

                </div>
                {% endif %}

  

原文地址:https://www.cnblogs.com/liulilitoday/p/13628194.html