文章目录
一、目标
- 简单分页
- 升级分页
二、过程
2.1 简单分页
2.1.1 导入
from django.core.paginator import Paginator
2.1.2 类视图分页属性
paginate_by = 10
2.1.3 ListView 传递了以下和分页有关的模板变量供我们在模板中使用
- paginator ,即 Paginator 的实例。
- page_obj ,当前请求页面分页对象。
- is_paginated,是否已分页。只有当分页后页面超过两页时才算已分页。
- object_list,请求页面的对象列表,和 post_list 等价。所以在模板中循环文章列表时可以选 post_list ,也可以选 object_list。
2.1.4 分页模板
<!-- blog/index.html -->
{% if is_paginated %}
<div class="pagination-sample">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">上一页</a>
{% endif %}
<span class="current">第 {{ page_obj.number }} 页 / 共 {{ paginator.num_pages }} 页</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">下一页</a>
{% endif %}
</div>
{% endif %}
2.2 升级分页
2.2.1 安装第三方模块
pipenv install django-pure-pagination
2.2.2 配置
# INSTALLED_APPS 添加 模块
pure_django
# 配置分页
PAGINATION_SETTINGS = {
'PAGE_RANGE_DISPLAYED': 4, # 分页条当前页前后应该显示的总页数(两边均匀分布,因此要设置为偶数),
'MARGIN_PAGES_DISPLAYED': 2, # 分页条开头和结尾显示的页数
'SHOW_FIRST_PAGE_WHEN_INVALID': True, # 当请求了不存在页,显示第一页
}
2.2.3 导入模块
# 导入
from pure-django import PaginationMixin
class IndexView(PaginationMixin, ListView):
2.2.4 修改分页模板
# 修改分页模板
# templates 下创建 pure_pagination/pagination.html 覆盖模块自带的
<div class="text-center pagination" style="width: 100%">
<ul>
{% if page_obj.has_previous %}
<li><a href="?{{ page_obj.previous_page_number.querystring }}"
class="prev">‹‹ </a></li>
{% else %}
<li><span class="disabled prev">‹‹ </span></li>
{% endif %}
{% for page in page_obj.pages %}
{% if page %}
{% ifequal page page_obj.number %}
<li class="current"><a href="#">{{ page }}</a></li>
{% else %}
<li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
{% endifequal %}
{% else %}
...
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li><a href="?{{ page_obj.next_page_number.querystring }}" class="next"> ››</a>
</li>
{% else %}
<li><span class="disabled next"> ››</span></li>
{% endif %}
</ul>
</div>
三、问题
- 没看懂升级分页中的覆盖的分页模板?
附上 Gitee 地址:https://gitee.com/langxing/HelloDjango-blog-tutorial