В предыдущей статье был реализован простой кейс блога, но за моей спиной были личные сообщения от фанатов, говорящих, что страница со списком блогов будет выглядеть не очень хорошо, если будет много данных, и спрашивали меня, могу ли я сделать пагинацию! Нечего сказать - аранжировка~
Расширение - реализация функции пейджинга
Django предоставляет новый класс, который поможет вам управлять данными с разбивкой на страницы, этот класс хранится в django/core/paginator.py и может принимать списки, кортежи или другие итерируемые объекты.
(1) Краткое пояснение:
Первая часть (импорт и создание экземпляров объектов подкачки и общие методы объектов подкачки)
# 导入
from django.core.paginator import Paginator
# 模拟数据库中数据
li = ["数据一", "数据二", "数据三", "数据四", "数据五", "数据六", "数据七"]
# 实例化分页对象:3条数据为一页
paginator = Paginator(li, 3)
print(paginator)
# 分页对象的常用方法:
print(paginator.count) # 分页对象总共含有元素个数
print(paginator.num_pages) # 返回分页之后的总页数
print(paginator.page_range) # 分页对象的可迭代范围
print(paginator.object_list) # 分页对象的数据查询集(一个元素列表的形式)
Вторая часть (общий метод создания экземпляра объекта n-й страницы && объекта n-й страницы)
# 实例化第n页对象
page = paginator.page(1) # 获取分页对象的第一页对象
print(page)
page2 = paginator.page(2)
# 第n页的实例对象常用方法:
print(page.object_list) # 当前页的数据查询集(一个元素列表的形式)
print(page.number) # 第n页对象的页码值
print(page.has_previous()) # 第一页对象是否有前一页
print(page.has_other_pages())# 第一页对象是否有其他页
print(page.has_next()) # 第一页对象是否有下一页
print(page.next_page_number())# 第一页对象的下一页页码值
print(page2.previous_page_number()) # 第二页对象的上一页页码值
print(page.start_index()) # 第一页对象含有数据元素的开始索引值
print(page.end_index()) # 第一页对象含有数据元素的结束索引值
Третья часть (как получить свой объект пейджинга через объект n-й страницы)
Пагинатор объекта экземпляра пейджинга и страница объекта экземпляра страницы n не взаимодействуют друг с другом многими способами. Тогда возникает проблема — а что, если вы в данный момент работаете с n-й страницей объекта экземпляра страницы, но вам нужно использовать какие-то методы пагинатора объекта экземпляра страницы?
Выше мы знаем, что пагинатор экземпляра объекта пейджинга выглядит так:
<django.core.paginator.Paginator object at 0x7f1b4dc0e0d0>
Экземпляр объекта на странице n выглядит следующим образом:
range(1, 4)
Нам просто нужно сделать следующее:
paginator = Paginator(li, 3)
page = paginator.page(1)
print(page.paginator)
(2) Использование:
① Модификация функции просмотра:
② Модификация соответствующего маршрута:
③ Модификация главной страницы:
Небольшое примечание: все переходы на страницу со списком блогов должны быть соответствующим образом изменены~
Возьмем в качестве примера изменение перехода страницы со списком блогов на главной странице (остальные ямы заполните сами!):
Осознайте эффект:
Нажмите на следующую страницу: