iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >分页功能
  • 451
分享到

分页功能

分页功能 2023-01-30 23:01:03 451人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

  我们在浏览很多网页的时候,由于数据太多,很多时候不能放在一个页面上,此时就需要分页功能。比如我们看到的博客园最下面的分页栏,它是动态的显示的,比如虽然说总页数会是100页,但我们不能把100页都显示出来,始终显示当前页的前5页和后5页

  我们在浏览很多网页的时候,由于数据太多,很多时候不能放在一个页面上,此时就需要分页功能。比如我们看到的博客园最下面的分页栏,它是动态的显示的,比如虽然说总页数会是100页,但我们不能把100页都显示出来,始终显示当前页的前5页和后5页,然后还有首页、尾页、上一页、下一页等功能,今天我就来实现这一功能,我们可以把它封装成一个类,以后哪里需要了,直接引用就行了。

  一、把分页功能定义成一个类

  pagination.py

class Pagination(object):
    def __init__(self,current_page,all_count,request,one_count=10,one_pages=11):
        self.current_page=current_page          #这是当前页
        self.all_count=all_count                #这是数据的总数量
        self.request=request
        self.one_count=one_count                 #这是一页能展示的数据量
        self.one_pages=one_pages                #这是一页能放几个页码
        self.mid_num=(one_pages-1)/2             #这是当前页码前后可以有几个页码数
        if all_count%one_count==0:
            self.pages=all_count//one_count      #这是总页码数
        else:
            self.pages=all_count//one_count+1

    @property
    def start(self):                          #这是拿到这一页数据的开头数
        return (self.current_page-1)*self.one_count
    @property
    def end(self):                          #这是拿到这一页数据的结尾数
        if self.current_page==self.pages:
            return self.all_count
        return self.current_page*self.one_count
def get_page(self): #这是当前页真正展示的页码及每个页码的路径,在这一步,用到了保留上次请求数据的技术,使得我们跳到其他页码后,搜索条件等请求数据依然保留,返回的是一个列表,里面放的就是展示页码的前端代码 content=copy.deepcopy(self.request.GET) #对于request.GET是不允许修改,但当我们深拷贝之后,就可以,content是这次请求进来后的请求数据 data_list=[] if self.pages <= self.one_pages: #这是当数据的总页码数小于每一个页可以显示的页码数时,我们的页码就没必要动态变化了,直接让所有页码显示出来就行了 first_page=1 #所以,页码开始数为1 last_page=self.pages #页码结束数为总页码数
else: #这是总页码数大于一页能显示的页码数时,就需要动态的显示页码,一般情况下 if self.current_page<=self.mid_num: #当当前页码的前面页码数小于我们设定的当前页码前要显示的页码数时,比如我们设定的mid_num为5,但我现在是第3页,前面没有5个页码 first_page=1 #页码开始数为1 last_page=self.one_pages #页码结束数为一页能显示的页码数
elif self.current_page+self.mid_num>self.pages: #总页码为20,当前页码为18,mid_num为5,但后面不够5个页码 last_page=self.pages #页码结束数为总的页码数 first_page=self.pages-self.one_pages+1 #开始数为总页码数减去一页能显示的页码数
else: #这是前后都够mid_num=5个页码的 first_page=self.current_page-self.mid_num #开始数为当前页码数减去mid_num last_page=self.current_page+self.mid_num     #结束数为当前页码数加上mid_num
#上一页和首页
     content['page']=1 #首页就是page为1的,我们把请求数据的page改为1 data_list.append(mark_safe('<nav aria-label="Page navigation" style="position: absolute;bottom: 20px;left:0;right:0;text-align: center" >' '<ul class="pagination"><li><a href="?%s" aria-label="Previous"><span aria-hidden="true">首页</span></a></li>'%content.urlencode())) if self.current_page==1: #这是上一页,把page改为当前页码数减1,但当现在页码为1时,上一个就没有设置值 data1=mark_safe('<li class="disabled"><span aria-hidden="true">上一页</span></li>') else: content['page']=self.current_page-1 data1=mark_safe('<li><a href="?%s" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>'%(content.urlencode())) data_list.append(data1) for i in range(int(first_page),int(last_page+1)): #从页码开始数到结束数循环,给每一个页码加上前端代码,和请求路径,把page改为当前循环的页码数 content['page']=i if i==self.current_page: data_list.append('<li><li class="active"><a href="?%s">%s</a></li></li>'%(content.urlencode(),i)) else: data_list.append('<li><li><a href="?%s">%s</a></li></li>' % (content.urlencode(), i)) #下一页和尾页, if self.current_page==self.pages: #和上一页、首页 一样 data2=mark_safe('<li class="disabled"><span aria-hidden="true">下一页</span></li>') else: content['page']=self.current_page+1 data2=mark_safe('<li><a href="?%s" aria-label="Next"><span aria-hidden="true">下一页</span></a></li>'%(content.urlencode())) data_list.append(data2) content['page']=self.pages data_list.append(mark_safe('<li><a href="?%s" aria-label="Previous"><span aria-hidden="true">尾页</span></a></li></ul></nav>'%content.urlencode())) data=''.join(data_list) #最好把列表里面的所有标签用空格连起来,返回,前端拿到这个标签字符,直接用模板渲染就行了 return mark_safe(data)

  现在有一个页面上需要用到分页,去调用这个类。

  test.py

from pagination import Pagination
def show(request):
    pagination = Pagination(current_page,queryset.count(), request, one_count=2, one_pages=9)     #我们要传当前的页数,数据的总数,,一页可以展示的数据数,一页的页码数
    data_page = pagination.get_page()            #这是已经写好的页码的前端代码
    obj_list = queryset[pagination.start:pagination.end]            #这是得到这一页要展示的数据
    
    return render(request,'show.html',locals())

  show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/CSS/bootstrap.css">
    <script src="/static/Jquery-3.3.1.js"></script>
    <script src="/static/js/bootstrap.js"></script>
</head>
<body>
    <div>{{obj_list}}</div>            #这是要展示的数据,格式还需要调整,循环这个列表,拿到每个对象,然后再取每个对象的值,用标签渲染
     {{ data_page }}                   #这是写好的页码代码,直接放在这里,就可以拿到页码
</body>
</html>

  展示效果,只需看最下面的页码,上面的数据,我是用标签渲染过的

 

--结束END--

本文标题: 分页功能

本文链接: https://www.lsjlt.com/news/181015.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 分页功能
      我们在浏览很多网页的时候,由于数据太多,很多时候不能放在一个页面上,此时就需要分页功能。比如我们看到的博客园最下面的分页栏,它是动态的显示的,比如虽然说总页数会是100页,但我们不能把100页都显示出来,始终显示当前页的前5页和后5页...
    99+
    2023-01-30
    分页 功能
  • vueiview实现分页功能
    本文实例为大家分享了vue iview实现分页功能的具体代码,供大家参考,具体内容如下 子组件 <template>   <div style="margin-to...
    99+
    2024-04-02
  • vue实现分页功能
    本文实例为大家分享了vue实现分页功能的具体代码,供大家参考,具体内容如下 使用组件分页 自己写分页 一、组件分页 <el-paginatio...
    99+
    2024-04-02
  • SpringBoot实现分页功能
    本文实例为大家分享了SpringBoot实现分页功能的具体代码,供大家参考,具体内容如下 新建demo\src\main\java\com\example\demo\mapper\U...
    99+
    2024-04-02
  • Mybatis Limit实现分页功能
    1. Limit实现分页 1.1 为什么需要分页 减少数据的处理量 1.2 使用Limit实现分页 select * from user limit startInde...
    99+
    2024-04-02
  • VUE+SpringBoot实现分页功能
    本文主要介绍一下 Vue + SpringBoot 中如何实现一个分页列表数据。 1、效果展示 2、VUE代码 VUE之视图定义 <el-row> ...
    99+
    2024-04-02
  • html怎么实现分页功能
    html中实现分页功能的方法:1、创建html文件;2、添加html代码架构;3、在body标签中使用ul、li标签设计页码数;4、添加script标签并写入css样式代码来实现点击及鼠标悬停的分页样式;5、通过浏览器方式查看设计效果。具体...
    99+
    2024-04-02
  • vue实现简单分页功能
    本文实例为大家分享了vue实现简单的分页功能的具体代码,供大家参考,具体内容如下 <template> <div id="pages">     <di...
    99+
    2024-04-02
  • java怎么实现分页功能
    这篇文章主要介绍“java怎么实现分页功能”,在日常操作中,相信很多人在java怎么实现分页功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现分页功能”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-03
  • GridView控件实现分页功能
    GridView控件本身并不直接支持分页功能,但可以通过其他方法来实现分页功能。一种常见的方法是使用Pager控件来实现分页。Pag...
    99+
    2023-09-20
    GridView
  • C#Winform分页功能的实现
    首先创建一个用户控件 如下图 用到的控件 label、button、TextBox  内部代码如下 #region 分页字段和属性 private ...
    99+
    2024-04-02
  • Django分页功能如何实现
    在Django中,可以使用Django内置的分页器(Paginator)来实现分页功能。以下是实现分页功能的一般步骤: 在视图函数...
    99+
    2024-03-07
    Django
  • word分页功能怎么使用
    本篇内容主要讲解“word分页功能怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“word分页功能怎么使用”吧!word分页使用方法:方法一: 首先进入word,点击“插入”。 然后点击下...
    99+
    2023-07-01
  • springboot分页功能怎么实现
    这篇“springboot分页功能怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot分页功能怎么实现...
    99+
    2023-07-06
  • css怎么实现分页功能
    css实现分页功能的方法:1、创建html文件;2、添加html代码架构;3、在body标签中使用ul、li标签设计页码数;4、添加script标签并写入css样式代码来实现点击及鼠标悬停的分页样式;5、通过浏览器方式查看设计效果。具体操作...
    99+
    2024-04-02
  • java如何实现分页功能
    在Java中实现分页功能,可以使用数据库的查询语句和Java代码来实现。以下是一种常见的实现方式:1. 首先,在数据库中使用查询语句...
    99+
    2023-08-19
    java
  • gridview分页功能怎么实现
    GridView分页功能的实现步骤如下:1. 在前端页面中添加一个GridView控件,并将其属性`AllowPaging`设置为`...
    99+
    2023-08-31
    gridview
  • Java实现分页查询功能
    分页查询 分页查询将数据库中庞大的数据分段显示,每页显示用户自定义的行数,提高用户体验度,最主要的是如果一次性从服务器磁盘中读出全部数据到内存,有内存溢出的风险 真假分页 假分页: ...
    99+
    2024-04-02
  • php如何实现分页功能
    在PHP中实现分页功能可以通过以下步骤:1. 确定总记录数和每页显示的记录数。可以通过查询数据库或其他方式获取总记录数,然后根据每页...
    99+
    2023-08-09
    php
  • vue实现表格分页功能
    本文实例为大家分享了vue实现表格分页功能的具体代码,供大家参考,具体内容如下 直接上代码: 这里是这里是template部分,主要由一个需要分页的表格和一个分页器组成。重点在于表格...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作