一. Django自带的分页器
from django.core.paginator import Paginator #导入分页器
from blog.models import Blog #自己的模型对象
blogs = Blog.objects.all() #获取全部博文
pages = Paginator(blogs, 10) #每10个博文对象分为1页
#分页器相关的方法和属性
print(pages.count) #得到里面总共有多少个模型对象
print(pages.num_pages) #总页数
print(pages.page_range) #页面列表,可以拿来遍历得到全部页码
#得到第1页包含的模型对象,该对象集合可以用于遍历得到里面的模型对象
blogs_page = pages.page(1)
print(blogs_page.number) #得到该对象集合当前是哪一页
print(blogs_page.has_previous()) #判断是否有前一页
print(blogs_page.has_next()) #判断是否有后一页二
二. 常规样式
三. 组成部分
1. 共192篇博文。当前第19页,共20页
(1)192:pages.count
(2)19:blog_page.number
(3)20:pages.num_pages
<span>
共{{pages.count}}篇博文。当前第{{blog_list_html.number}}页,共{{pages.num_pages}}页
</span>
2. << | 1 | ... | 18 | 19 | 20 | >>
(1)页码数据的显示
<ul class="pagination">
{# 上一页,需要用has_previous方法判断是否有上一页 #}
<li>
{# 如果当前blog_list_html有上一页,显示上一页,否则显示当前页 #}
<a href="?page=
{% if blog_list_html.has_previous %}
{{blog_list_html.previous_page_number}}
{% else %}
{{blog_list_html.number}}
{% endif %}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{# 遍历所有页码 #}
{% for page in pages.page_range %}
<li><a href="?page={{page}}">{{page}}</a></li>
{% endfor %}
{# 下一页,需要用到has_next方法判断是否有下一页 #}
<li>
<a href="?page=
{% if blog_list_html.has_next %}
{{blog_list_html.next_page_number}}
{% else %}
{{blog_list_html.number}}
{% endif %}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
(2)凸显当前页码
{# 全部页码 #}
{% for page_num in page_of_blogs.paginator.page_range %}
{% if page_num == page_of_blogs.number %}
<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 %}
注明:学习资料来自“再敲一行代码的个人空间”以及“杨仕航的博客”