使用Django实现分页器功能

要使用Django实现分页器,必须从Django中导入Paginator模块

from django.core.paginator import Paginator

假如现在有150条记录要显示,每页显示10条

>>> from django.core.paginator import Paginator#导入Paginator模块
>>> list1=[i for i in range(0,150)]#使用列表生成器生成一个包含150个数字的列表
>>> page1=Paginator(list1,10)#生成一个Paginator对象
>>> print(page1.count)#打印总的记录数,即列表list1的长度
150
>>> print(page1.num_pages)#打印总的页数,即总记录数除以每页显示的条目数
15
>>> print(page1.page_range)#页数的列表
range(1, 16)
>>> print(page1.page(1))#打印第一页的page对象
<Page 1 of 15>
>>> page1.page(1).object_list#打印第一页的所有记录
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> page1.page(2).object_list#打印第二页的所有记录
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> page1.page(2).next_page_number()#打印当前的页(第2页)的下一页的页码
3
>>> page1.page(2).has_next()#第2页是否有下一页
True
>>> page1.page(2).has_previous()#第2页是否有上一页
True
>>> page1.page(2).has_other_pages()#第2是否有其他页
True
>>> page1.page(2).start_index()#第2页第一条记录的序号
11
>>> page1.page(2).end_index()#第2页最后一条记录的序号
20
>>> page1.page(0)#第0页是否有记录,会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    ...
    raise EmptyPage(_(‘That page number is less than 1‘))
django.core.paginator.EmptyPage: <exception str() failed>
>>> page1.page(15)#打印第15页的对象
<Page 15 of 15>

例子,使用Django实现一个分页效果

后端代码:

#导入render和HttpResponse模块 from django.shortcuts import render,HttpResponse #导入Paginator,EmptyPage和PageNotAnInteger模块 from django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerdef index(request):
    """首页"""

        # 获取Book数据表中的所有记录
    post_list = Post.objects.all()
    print(post_list)

        # 生成paginator对象,定义每页显示10条记录
    paginator = Paginator(post_list, 5)
        # 从前端获取当前的页码数,默认为1
    page = request.GET.get(‘page‘, 1)
        # 把当前的页码数转换成整数类型
    currentPage = int(page)

    try:
        print(page)
        post_list = paginator.page(page)  # 获取当前页码的记录
    except PageNotAnInteger:
        post_list = paginator.page(1)  # 如果用户输入的页码不是整数时,显示第1页的内容
    except EmptyPage:
        post_list = paginator.page(paginator.num_pages)  # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容

    return render(request,‘blog/index.html‘,locals())

前端代码:

在需要分页的地方加入

{% load staticfiles %}
<div class="container">
    <ul class="pagination" id="pager">
        {#上一页按钮开始#}
        {# 如果当前页有上一页#}
        {% if post_list.has_previous %}
            {#  当前页的上一页按钮正常使用#}
            <li class="previous"><a href="/?page={{ post_list.previous_page_number }}">上一页</a></li>
        {% else %}
            {# 当前页的不存在上一页时,上一页的按钮不可用#}
            <li class="previous disabled"><a href="#">上一页</a></li>
        {% endif %}
        {#上一页按钮结束#}
        {# 页码开始#}
        {% for num in paginator.page_range %}

            {% if num == currentPage %}
                <li class="item active"><a href="/?page={{ num }}">{{ num }}</a></li>
            {% else %}
                <li class="item"><a href="/?page={{ num }}">{{ num }}</a></li>

            {% endif %}
        {% endfor %}
        {#页码结束#}
        {# 下一页按钮开始#}
        {% if post_list.has_next %}
            <li class="next"><a href="/?page={{ post_list.next_page_number }}">下一页</a></li>
        {% else %}
            <li class="next disabled"><a href="#">下一页</a></li>
        {% endif %}
        {# 下一页按钮结束#}
    </ul>
</div>

原文地址:https://www.cnblogs.com/guigujun/p/8372094.html

时间: 2024-08-01 19:44:04

使用Django实现分页器功能的相关文章

Django实现分页器功能

要使用Django实现分页器,必须从Django中导入Paginator模块 from django.core.paginator import Paginator 假如现在有150条记录要显示,每页显示10条 1 >>> from django.core.paginator import Paginator#导入Paginator模块 2 >>> list1=[i for i in range(0,150)]#使用列表生成器生成一个包含150个数字的列表 3 >

【django之分页器】

一.什么是分页功能 二.Django的分页器(paginator) 语法: paginator = Paginator(book_list, 8) #8条一页 print("count:", paginator.count) # 数据总数print("num_pages", paginator.num_pages) # 总页数print("page_range", paginator.page_range) # 页码的列表 page1 = pag

Django组件-分页器

一丶Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models import * from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def index(request): ''' 批量导入数据: Booklist=[] fo

Django之分页器组件与自定义

Django之分页器组件 class Pagination(object): def __init__(self,current_page,all_count,per_page_num=2,pager_count=11): """ 封装分页相关数据 :param current_page: 当前页 :param all_count: 数据库中的数据总条数 :param per_page_num: 每页显示的数据条数 :param pager_count: 最多显示的页码个数

django模板分页器

对于嘉宾管理页面来说,当前需要一个分页功能,一场发布会需要由几千位嘉宾参加,如果将所有的嘉宾信息不做分页地显示在页面上,不仅页面的加载速度会受到严重影响,而且页面一次显示几千条甚至几万条并不方便查看,Django提供了Paginator类来实现分页功能,分页功能略为复杂,首先进入Django的shell模式,练习Paginator类的基本使用,请在嘉宾表至少添加5名嘉宾信息,以便接下来的练习,sign_guest表里已创建5条数据 from django.core.paginator impor

Django之Form功能

一 什么是Form?什么是DjangoForm? Django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 示例代码

django实现发送邮件功能

django实现邮件发送功能 1)首先注册一个邮箱,这里以163邮箱为例 2)注册之后登录,进行如下修改 找到设置,设置一个授权码,授权码的目的仅仅是让你有权限发邮件,但是不能登录到邮箱进行修改,发送邮件时,可以代替密码 3)然后在项目里的配置文件settings.py中进行一些配置: EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = False #是否使用TLS安全传输协议(用于在两个通信

利用Pillow,几行代码实现的最简单的Django页面验证码功能

验证码本质上就是生成带有文字的图片,用来区分人与机器的行为.如果考虑到防止破解自然会涉及到许多复杂的算法,用以防止从图片中容易地识别出文字,但作为一个简单的例子,我们就使用最简单的方法来达成一个验证码的功能.以下就是利用Python的第三方图形处理模块Pillow来实现的一个简单的验证码功能: 首先,在accounts.views中定义一个生成验证码的函数: from PIL import Image, ImageDraw, ImageFont from django.http.response

django 的分页器Paginator ,从django中导入类

先创建表,然后生成批量数据. 在models文件里 from django.db import models # Create your models here. class Book(models.Model): name = models.CharField(max_length=32) price = models.DecimalField(max_digits=5,decimal_places=2) 然后执行python manage.py makemigrations   ,pytho