分页代码pagination.py如文件:

from django.utils.safestring import mark_safe
from django.http.request import QueryDict class Pagination:
"""
page: 当前的页码数
all_count: 总的数据量
per_num : 每页显示的数据量
max_show: 最多显示的页码数
""" def __init__(self, page, all_count, params=None, per_num=, max_show=):
try:
self.page = int(page)
if self.page <= :
self.page =
except Exception:
self.page =
# 查询条件
self.params = params
if not self.params:
self.params = QueryDict(mutable=True)
# 总的数据量
all_count = all_count
# 每页显示的数据量 # 总的页码数
total_num, more = divmod(all_count, per_num)
if more:
total_num +=
# 最大显示的页码数
half_show = max_show // if total_num <= max_show:
page_start =
page_end = total_num
else:
if self.page - half_show <= :
# 页码的起始值
page_start =
# 页码的终止值
page_end = max_show
elif self.page + half_show > total_num:
page_end = total_num
page_start = total_num - max_show + else:
# 页码的起始值
page_start = self.page - half_show
# 页码的终止值
page_end = self.page + half_show self.page_start = page_start
self.page_end = page_end
self.total_num = total_num
self.start = (self.page - ) * per_num
self.end = self.page * per_num @property
def page_html(self):
li_list = [] if self.page == :
li_list.append(
'<li class="disabled"><a aria-label="Previous"> <span aria-hidden="true">&laquo;</span></a></li>')
else:
self.params['page'] = self.page - # { query: ,page : }
li_list.append(
'<li><a href="?{}" aria-label="Previous"> <span aria-hidden="true">&laquo;</span></a></li>'.format(
self.params.urlencode())) # ?query=&page= for i in range(self.page_start, self.page_end + ):
self.params['page'] = i # { query: ,page : i}
if i == self.page:
li_list.append('<li class="active"><a href="?{}">{}</a></li>'.format(self.params.urlencode(), i))
else:
li_list.append('<li><a href="?{}">{}</a></li>'.format(self.params.urlencode(), i)) if self.page == self.total_num:
li_list.append(
'<li ><a aria-label="Next"> <span aria-hidden="true">&raquo;</span></a></li>')
else:
self.params['page'] = self.page +
li_list.append(
'<li ><a href="?{}" aria-label="Next"> <span aria-hidden="true">&raquo;</span></a></li>'.format(
self.params.urlencode())) return mark_safe(''.join(li_list))

使用需导入

<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7-dist/css/bootstrap.css' %}">

添加bootstrap的ul样式

  <nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{{ page_html }} #使用分页代码
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>

上面的还没有记住查询条件 ,因为使用的是post请求,改成get请求。

由POST获取搜索框内容改成由GET里获取。并且判断没有获取到那么就是返回首页。es限制只能查出10条数据,我们这里在query同级上加 ‘size’:大小   ,这样就可以显示多个了

实例化page,数据是列表变成以下切片,然后传页面

页面代码使用上面已经写了。这样点击其它页面就能使用前面拼接的内容了

python中分页使用的更多相关文章

  1. python/Djangof分页与自定义分页

    python/Djangof分页与自定义分页 Django分页 ##============================================分页==================== ...

  2. python中的property属性

    目录 1. 什么是property属性 2. 简单的实例 3. property属性的有两种方式 3.1 装饰器方式 3.2 类属性方式,创建值为property对象的类属性 4. property属 ...

  3. python web 分页组件

    闲来无事便写了一个易使用,易移植的Python Web分页组件.使用的技术栈是Python.Django.Bootstrap. 既然是易使用.易移植的组件,首先介绍一下其在django框架中的调用方式 ...

  4. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  5. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  6. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  7. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  8. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

  9. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

随机推荐

  1. hive的分桶原理

    套话之分桶的定义: 分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储.对于 hive 中每一个表.分区都可以进一步进行分桶. 列的哈希值除以桶的个数来决定每条数据划分在哪个桶中.(网上其它定 ...

  2. linux驱动开发学习二:创建一个阻塞型的字符设备

    在Linux 驱动程序中,可以使用等待队列来实现阻塞进程的唤醒.等待队列的头部定义如下,是一个双向列表. struct list_head { struct list_head *next, *pre ...

  3. Grammar01 语法七要素之一_词类

    1 词类 1.1 词类表格 实词 名词 -> n. -> noun -> 给所有人和物命名的词. 动词 -> v. (vt. vi.) -> verb ( transit ...

  4. Mysql操作命令(基础)

    创建数据库 CREATE DATABASE name; 显示所有数据库 SHOW DATABASES; 删除数据库 DROP DATABASE name; 选择数据库 USE DATABASENAME ...

  5. socks5 代理服务器ss5配置

    安装 yum install pam-devel openldap-devel openssl-devel yum -y install gcc automake make pam-devel ope ...

  6. 【记录】【springboot】动态定时任务ScheduledFuture,可添加、修改、删除

    这里只演示添加和删除任务的,因为修改就是删除任务再添加而已. 方便演示,任务就是每3秒打印 1.没有任务 后台 2.添加一个任务 3.再添加一个任务 4.删除一个任务 5.再添加一个任务 6.代码 运 ...

  7. Java多线程编程(1)--Java中的线程

    一.程序.进程和线程   程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文 ...

  8. JMeter安装及简单应用示例

    一.Jmeter下载 官网地址:http://jmeter.apache.org/ 1.进入官网 2.选中一个版本下载 3.解压安装即可 二.Jmeter环境变量配置 1.   电脑桌面----> ...

  9. pytest_05_fixture之conftest.py

    前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然 ...

  10. [loj 6253] Yazid的新生舞会

    (很久之前刷的题现在看起来十分陌生a) 题意: 给你一个长度为n的序列A,定义一个区间$[l,r]$是“新生舞会的”当且仅当该区间的众数次数严格大于$\frac{r-l+1}{2}$,求有多少子区间是 ...