Django 学习 Blog 实操 18 --- 简单分页,升级分页

一、目标

  • 简单分页
  • 升级分页

二、过程

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">&lsaquo;&lsaquo; </a></li>
    {% else %}
      <li><span class="disabled prev">&lsaquo;&lsaquo; </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"> &rsaquo;&rsaquo;</a>
      </li>
    {% else %}
      <li><span class="disabled next"> &rsaquo;&rsaquo;</span></li>
    {% endif %}
  </ul>
</div>

三、问题

  • 没看懂升级分页中的覆盖的分页模板?

附上 Gitee 地址:https://gitee.com/langxing/HelloDjango-blog-tutorial

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sapphire~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值