一、分页扩展类

#! /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. FastJSON将Java对象转为json,日期显示时间戳未格式化解决办法

    JSON版本:FastJson Java 对象转换为 JSON 格式 定义以下 Person JavaBean: public class Person { @JSONField(name = &qu ...

  2. 让vue-router渲染为指定的标签

    <router-link :to="{name:'cart'}" tag="li"> cart </router-link> 在rout ...

  3. linux下解压缩文件中文乱码问题的解决

    在windows上压缩的文件,是以系统默认编码中文来压缩文件.由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码. 虽然2005年就有人把这报告为bu ...

  4. TensorFlow——MNIST手写数据集

    MNIST数据集介绍 MNIST数据集中包含了各种各样的手写数字图片,数据集的官网是:http://yann.lecun.com/exdb/mnist/index.html,我们可以从这里下载数据集. ...

  5. C#调用7z实现文件的压缩与解压

    1.关于7z 首先在这里先介绍一下7z压缩软件,7z是一种主流的 压缩格式,它拥有极高的压缩比.在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式.主要有以下特点: 来源且模块化的组 ...

  6. Linux session(会话)

    笔者在前文<Linux job control>中介绍了进程组(job)的概念以及常见的 job control 操作,本文接着介绍 session 的概念.本文中演示部分使用的环境为 u ...

  7. dp-最长回文串

    博客 : http://blog.csdn.net/hao_zong_yin/article/details/72730732 问题描述: 求一个序列中的最长回文串,这个串可以不连续 , 如  { 1 ...

  8. Processing 3!

    Welcome to Processing 3! Dan explains the new features and changes; the links Dan mentions are on th ...

  9. 个人作业四——Alpha测试

    个人作业四--Alpha测试 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 团队名称 GP工作室 这个作业的目标 对其他小组的项目进行测试 测试人员 许佳文 学号 2017310242 ...

  10. Java程序员学习Go指南(二)

    摘抄:https://www.luozhiyun.com/archives/211 Go中的结构体 构建结构体 如下: type AnimalCategory struct { kingdom str ...