一. 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 %}
注明:学习资料来自“再敲一行代码的个人空间”以及“杨仕航的博客”