当页面数据过多时我们需要对数据进行分页处理,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 %}