一、分页扩展类

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "TKQ"
class Pagination:
def __init__(self,current_page,all_item,base_url='',per_pagenum=5,min_per_pagenum=1,max_per_pagenum=100):
#每页条目数量
try:
per_pagenum=int(per_pagenum)
if per_pagenum < min_per_pagenum:
self._per_pagenum=min_per_pagenum
elif per_pagenum > max_per_pagenum:
self._per_pagenum = max_per_pagenum
else:
self._per_pagenum = per_pagenum
except:
self._per_pagenum=5 #总共页数
try:
all_item = int(all_item)
self._count=all_item
self._p_nums, c = divmod(all_item, self._per_pagenum)
if c > 0:
self._p_nums += 1
except Exception as e:
raise e # 当前页码
try:
page = int(current_page)
if page < 1:
self._current_page = 1
elif page > self._p_nums:
self._current_page = self._p_nums
else:
self._current_page = page
except:
self._current_page = 1 #基础URL
self.base_url = base_url @property
def page(self):
"""
:return: 返回当前页页码
"""
return self._current_page
@property
def num_per_page(self):
"""
:return: 每页显示项个数
"""
return self._per_pagenum
@property
def count(self):
"""
:return: 所有项个数
"""
return self._count
@property
def num_pages(self):
"""
:return:返回总页数.
"""
return self._p_nums def has_prev(self):
"""
:return: 是否有上一页
"""
if self._current_page == 1:
return False
else:
return True def has_next(self):
"""
:return: 是否有下一页
"""
if self._current_page == self._p_nums:
return False
else:
return True @property
def start_index(self):
"""
:return: 当前页起始条目索引值
"""
return (self._current_page - 1) * self._per_pagenum @property
def end_index(self):
"""
:return: 当前页终止条目索引值
"""
return self._current_page * self._per_pagenum #显示前端分页效果
def show_pager(self):
list_page = []
if self._p_nums < 11:
s = 1
t = self._p_nums + 1
else: # 总页数大于11
if self._current_page < 6:
s = 1
t = 12
else:
if (self._current_page + 5) < self._p_nums:
s = self._current_page - 5
t = self._current_page + 5 + 1
else:
s = self._p_nums - 11
t = self._p_nums + 1
# 首页
first = '<a href="/%s/1">首页</a>' % self.base_url
list_page.append(first)
# 上一页
if self.has_prev():
prev = '<a href="/%s/%s">上一页</a>' % (self.base_url,self._current_page - 1,)
list_page.append(prev)
#显示个页码
for p in range(s, t): # 1-11
if p == self._current_page:
temp = '<a class="active" href="/%s/%s">%s</a>' % (self.base_url,p, p)
else:
temp = '<a href="/%s/%s">%s</a>' % (self.base_url,p, p)
list_page.append(temp)
#下一页
if self.has_next():
next = '<a href="/%s/%s">下一页</a>' % (self.base_url,self._current_page + 1,)
list_page.append(next) # 尾页
last = '<a href="/%s/%s">尾页</a>' % (self.base_url,self._p_nums,)
list_page.append(last) # 跳转
jump = """<input type='text' /><a onclick="Jump('%s',this);">GO</a>""" % (self.base_url)
script = """<script>
function Jump(baseUrl,ths){
var val = ths.previousElementSibling.value;
if(val.trim().length>0){
location.href = baseUrl + val;
}
}
</script>"""
list_page.append(jump)
list_page.append(script)
str_page = "".join(list_page)
return str_page if __name__ == '__main__':
p=Pagination(2,100,'index',per_pagenum=10)
print p._p_nums,p.base_url,p._current_page

Pagination类

 
二、使用tonado模板展示
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "TKQ"
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from pager import Pagination from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler):
def get(self, page):
p = Pagination(page, 100, 'index', 10)
self.render('index.html', pager=p) if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application([
(r"/index/(?P<page>\w*)",IndexHandler)
],template_path="template",static_path="static") http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

tornado

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.pager a{
display: inline-block;
padding: 5px;
margin: 3px;
background-color: cadetblue;
}
.pager a.active{
background-color: brown;
color: white;
}
</style> </head>
<body>
<div>
<p>起始项索引值:{{pager.start_index}}</p>
<p>终止项索引值:{{pager.end_index}}</p>
<p>当前页:{{pager.page}}</p>
<p>共 {{pager.num_pages}} 页</p>
<p>每页显示 {{pager.num_per_page}} 个</p>
<p>base_url: {{pager.base_url}} </p>
</div>
<div class="pager">
{% raw pager.show_pager() %}
</div> </body>
</html>

tornado模板使用

 
三、jquery插件进行展示
 使用前端Js进行异步调用,比使用模板的效率高。
待补充。。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

tornado自定义分页扩展的更多相关文章

  1. web框架--tornado自定义分页

    1.tornado_main.py #!/usr/bin/env python # -*- coding: utf-8 -*- import tornado.web import tornado.io ...

  2. MVC下分页的自定义分页一种实现

    1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...

  3. mvc自定义分页(加页数的)(转)

    1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...

  4. Django自定义分页、bottle、Flask

    一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...

  5. Python学习(三十六)—— Cookie、Session和自定义分页

    一.Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR ...

  6. Django(十四)分页器(paginator)及自定义分页D

    http://www.mamicode.com/info-detail-1724597.html http://www.cnblogs.com/wupeiqi/articles/5246483.htm ...

  7. python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)

    今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...

  8. Django Cookie Session和自定义分页

    Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, ...

  9. Django——自定义分页(可调用)

    1.view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models ...

随机推荐

  1. 解决springmvc报错,java.lang.IllegalArgumentException:No converter found for return value of type: class .......

    1.背景 最近在自学java中的三大框架 ssm,在 springmvc 与 mybatis 整合过程中用到 json 数据交互.因为看的视频的是比较早的嘛,一些配置.jar包什么的,要么跟 jdk ...

  2. Python PyInstaller安装和使用教程

    安装 PyInstalle Python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块. 安装 PyInstaller 模块与安装其他 Python 模块 ...

  3. Eclipse中安装LEAP插件

    点击eclipse中顶部菜单栏中 Help 项,选择 Install New Software... 项 在弹出安装窗口中点击 Add... 在弹出的添加安装软件的窗口中点击 Local... 选择插 ...

  4. Excel获取当前日期和时间

    在Excel中获取当前时间 1.第一种在空的单元格内输入函数“NOW()”回车即可获取当前时间如图 2.第二种选中空单元格“按住CTRL+:”回车即可获取当前时间 3.第一种在空的单元格内输入函数“t ...

  5. shell学习-常用语句

    为什么使用shell 可以快速.简单的完成编程,实现自己的想法.Shell非常适合编写小的工具,因为小工具更强调的是易于配置.维护.移植等,而不是执行效率. 当自己的想法确实有必要进行优化,有必要让它 ...

  6. SpringBoot项目配置Date类型数据自动格式转换

    application.yml加入配置 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8

  7. Core 定时任务之TimeJob

    第一:引入NuGet包: Install-Package Pomelo.AspNetCore.TimedJob -Version -rtm- 第二: 在StartUp 中注册Job: public c ...

  8. Oauth2的使用(第三方授权登录)

    例子: 京东商城 ,微博 ,用户三者之间的关系 第一方:用户 第二方:京东商城 第三方:微博 用户不希望在京东商城上注册,可以授权微博使用微博上的用户信息进行登录京东商城. 授权流程: 地址一:授权页 ...

  9. Gitlab应用——系统管理

    ​ 查看linux系统信息 ​ 查看日志 ​ ​ 创建账号 ​ 选择regular,这是一个普通账号,点击“create user”账号创建完成 ​ 点击“User”,然后点击“New user”.使 ...

  10. TensorFlow or PyTorch

    既然你已经读到了这篇文章,我就断定你已经开始了你的深度学习之旅了,并且对人造神经网络的研究已经有一段时间了:或者也许你正打算开始你的学习之旅.无论是哪一种情况,你都是因为发现你陷入了困惑中,才找到了这 ...