django paginator 分页功能

转自:https://blog.csdn.net/weixin_42077001/article/details/81007127

Django提供了一个新的类来帮助你管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表、元组或其它可迭代的对象。

基本语法

class Paginator(object):
    def __init__(self, object_list, per_page, orphans=0,
                 allow_empty_first_page=True):
        self.object_list = object_list
        self.per_page = int(per_page)
        self.orphans = int(orphans)
        self.allow_empty_first_page = allow_empty_first_page

基本语法实例

import os
 
from django.core.paginator import Paginator
objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br data-filtered="filtered">
p = Paginator(objects,3)  # 3条数据为一页,实例化分页对象
print p.count  # 10 对象总共10个元素
print p.num_pages  # 4 对象可分4页
print p.page_range  # xrange(1, 5) 对象页的可迭代范围
 
page1 = p.page(1)  # 取对象的第一分页对象
print page1.object_list  # 第一分页对象的元素列表['john', 'paul', 'george']
print page1.number  # 第一分页对象的当前页值 1
 
page2 = p.page(2)  # 取对象的第二分页对象
print page2.object_list  # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']
print page2.number  # 第二分页对象的当前页码值 2
 
print page1.has_previous()  # 第一分页对象是否有前一页 False
print page1.has_other_pages()  # 第一分页对象是否有其它页 True
 
print page2.has_previous()  # 第二分页对象是否有前一页 True
print page2.has_next()  # 第二分页对象是否有下一页 True
print page2.next_page_number()  # 第二分页对象下一页码的值 3
print page2.previous_page_number()  # 第二分页对象的上一页码值 1
print page2.start_index()  # 第二分页对象的元素开始索引 4
print page2.end_index()  # 第2分页对象的元素结束索引 6

官方解释

在视图中的应用

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
 
def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page
    page = request.GET.get('page')
    try:
        contacts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        contacts = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        contacts = paginator.page(paginator.num_pages)
    return render(request, 'list.html', {'contacts': contacts})

在template的html模板中的应用

{% for contact in contacts %}
    {# Each "contact" is a Contact model object. #}
    {{ contact.full_name|upper }}<br />
    ...
{% endfor %}
 
<div class="pagination">
    <span class="step-links">
        {% if contacts.has_previous %}
            <a href="?page={{ contacts.previous_page_number }}">previous</a>
        {% endif %}
 
        <span class="current">
            Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
        </span>
 
        {% if contacts.has_next %}
            <a href="?page={{ contacts.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>

举例讲述分页功能的使用

目的说明
  现要实现如下功能

  1. 网页上显示分页数据,3条数据为一页
  2. 有分页导航功能,被选中页高亮显示
  3. 如果没有上一页或下一页,则不出现箭头导航
  4. 如果最后一页的数据少于2条,合并到上一页

效果图
  图1:
在这里插入图片描述
  图2:
在这里插入图片描述
视图定义
在这里插入图片描述
定义templates
在这里插入图片描述

Django PaginatorDjango 中用于分页功能的内置模块。在网站开发中,通常会遇到数据量较大的情况,为了提高用户体验和减轻服务器压力,需要对数据进行分页显示。这时,Django Paginator 就能够有效地帮助开发者实现这一功能。 使用 Django Paginator 非常简单方便。首先,开发者需要导入 PaginatorPage 类,然后在视图函数中获取到需要分页的数据集。接着,通过 Paginator 类将数据集进行分页处理,设置每页显示的数量,最后将分页对象传递给模板进行渲染。 在模板中,可以通过两个主要的变量实现分页显示。一个是 paginator 对象,它包含了有关分页信息的方法和属性,比如 num_pages、page_range 等;另一个是 page 对象,它包含了当前页的数据集合,可以通过 for 循环进行遍历显示。 除了基本的分页功能外,Django Paginator 还提供了一些其他的特性,比如处理不合法页码的情况、自定义显示页面的范围、处理数据过滤和排序等。开发者也可以根据自己的需求对 Paginator 进行定制化的扩展,以满足特定的业务需求。 总的来说,Django Paginator 提供了一种简单而强大的方式来处理分页数据,能够大大简化开发者的工作,并且可以有效地提升网站的性能和用户体验。因此,对于使用 Django 进行网站开发的开发者来说,熟练掌握和使用 Paginator 是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值