我的编程空间,编程开发者的网络收藏夹
学习永远不晚

分页功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

分页功能

  我们在浏览很多网页的时候,由于数据太多,很多时候不能放在一个页面上,此时就需要分页功能。比如我们看到的博客园最下面的分页栏,它是动态的显示的,比如虽然说总页数会是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 class="lazy" data-src="/static/jquery-3.3.1.js"></script>
    <script class="lazy" data-src="/static/js/bootstrap.js"></script>
</head>
<body>
    <div>{{obj_list}}</div>            #这是要展示的数据,格式还需要调整,循环这个列表,拿到每个对象,然后再取每个对象的值,用标签渲染
     {{ data_page }}                   #这是写好的页码代码,直接放在这里,就可以拿到页码
</body>
</html>

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

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

分页功能

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

下载Word文档

猜你喜欢

分页功能

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

java怎么实现分页功能

这篇文章主要介绍“java怎么实现分页功能”,在日常操作中,相信很多人在java怎么实现分页功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现分页功能”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-03

springboot分页功能怎么实现

这篇“springboot分页功能怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot分页功能怎么实现
2023-07-06

java如何实现分页功能

在Java中实现分页功能,可以使用数据库的查询语句和Java代码来实现。以下是一种常见的实现方式:1. 首先,在数据库中使用查询语句获取总记录条数。例如,对于MySQL数据库,可以使用以下语句:```SELECT COUNT(*) FROM
2023-08-19

php分页功能如何实现

在PHP中实现分页功能,可以按照以下步骤进行操作:1.获取总记录数:查询数据库获取数据总记录数。2.计算总页数:通过总记录数和每页显示的记录数,计算出总页数。3.获取当前页码:通过URL参数或表单提交的页码值,获取当前页码。4.计算查询的起
2023-08-24

GridView控件实现分页功能

GridView控件本身并不直接支持分页功能,但可以通过其他方法来实现分页功能。一种常见的方法是使用Pager控件来实现分页。Pager控件是一个用于显示分页导航链接的控件,可以与GridView控件配合使用。以下是一个简单的示例代码:``
2023-09-20

Django分页功能如何实现

在Django中,可以使用Django内置的分页器(Paginator)来实现分页功能。以下是实现分页功能的一般步骤:在视图函数中获取需要分页的数据集合。创建一个Paginator对象,将数据集合和每页显示的数量传入Paginator对象
Django分页功能如何实现
2024-03-07

php如何实现分页功能

在PHP中实现分页功能可以通过以下步骤:1. 确定总记录数和每页显示的记录数。可以通过查询数据库或其他方式获取总记录数,然后根据每页显示的记录数计算出总页数。2. 获取当前页码。可以通过URL参数或其他方式获取当前页码。3. 计算起始索引。
2023-08-09

gridview分页功能怎么实现

GridView分页功能的实现步骤如下:1. 在前端页面中添加一个GridView控件,并将其属性`AllowPaging`设置为`true`,以启用分页功能。2. 在代码-behind中,获取GridView的数据源,并设置GridVie
2023-08-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录