1、定义分页类

class Pagination(object):
'''
分页类
参数:
per_page:每页数量
total_data:总数目
cur_page:当前页。
用法:(flask,html中自定义css)
py:
page = int(request.args.get("page",1)) #获取args参数'page'
per_page = 50 #每页的数量
dsubAll = query_db("SELECT COUNT(id) AS C FROM dsub",one=True)["C"] #总数目
pages = Pagination(cur_page=page,per_page=per_page,total_data=dsubAll) #分页类
dsub = query_db("SELECT * FROM dsub LIMIT ?,?",(pages.offset,pages.limit)) #取offset与limit进行分页
html:
<div>{{ pages.get_html() | safe }}</div>
'''
def __init__(self,per_page=20,total_data=20,cur_page=1):
import math
self.size = per_page
self.data_count = total_data
self.page_current = int(cur_page)
self.page_max = int(math.ceil(self.data_count * 0.1 * 10 / self.size )) self.page_current = 1 if self.page_current < 1 else self.page_current
self.page_current = self.page_max if self.page_current > self.page_max else self.page_current self.offset = ( self.page_current - 1) * self.size
self.limit = self.size #判断url中是否有其他参数,以及是否已有page参数
_fullpath = web.ctx.fullpath
if "?" in _fullpath:
if "page" in _fullpath:
self.url = _fullpath.split("page")[0]
else:
self.url = "{}&".format(_fullpath)
else:
self.url = "{}?".format(_fullpath) def get_html(self):
self.page_pre = self.page_current - 1
self.page_next = self.page_current + 1
if self.page_max in (0,1) :
html = '''
<ul>
<li><a>首页</a></li>
<li><a>上一页</a></li>
<li><a>下一页</a></li>
<li><a>尾页</a></li>
</ul>
'''
elif self.page_current <= 1:
html = '''
<ul>
<li><a>首页</a></li>
<li><a>上一页</a></li>
<li><a href="{self.url}page={self.page_next}">下一页</a></li>
<li><a href="{self.url}page={self.page_max}">尾页</a></li>
</ul>
'''.format(self=self)
elif self.page_current >= self.page_max:
html = '''
<ul>
<li><a href="{self.url}page=1">首页</a></li>
<li><a href="{self.url}page={self.page_pre}">上一页</a></li>
<li><a>下一页</a></li>
<li><a>尾页</a></li>
</ul>
'''.format(self=self)
else:
html = '''
<ul>
<li><a href="{self.url}page=1">首页</a></li>
<li><a href="{self.url}page={self.page_pre}">上一页</a></li>
<li><a href="{self.url}page={self.page_next}">下一页</a></li>
<li><a href="{self.url}page={self.page_max}">尾页</a></li>
</ul>
'''.format(self=self)
banner = '''
<ul>
<li>
<a>第 <code>{self.page_current}</code> 页</a>
</li>
<li>
<a>共 <code>{self.page_max}</code> 页</a>
</li>
</ul>
'''.format(self=self)
html = '<div class="pagination">{}</div>'.format(html + banner) if self.data_count > self.size:
return html
else:
return ""

2、用法

        i = web.input()
page = i.get("page",1) pageSize = 20
notifyAll = len(list(db.select("team_notify",where="status='doing'")))
notifyPage = conf.Pagination(pageSize,notifyAll,page) notifies = db.select("team_notify",where="status='doing'",order="expressTime DESC",limit=pageSize,offset=notifyPage.offset)

3、效果

web.py 中的分页设计的更多相关文章

  1. 浅谈python web框架中的orm设计

    看了一下廖雪峰的那个web框架,其实就是封装了web.py,请求使用异步并将aiomysql做为MySQL数据库提供了异步IO的驱动,前端部分则整合了jinja.其中最难的应该是orm部分了. 下面是 ...

  2. RESTful Web Services中API的设计原则(转)

    当下前后端分离的设计已经是web app开发的标配,但是如何设计一个强壮,扩展性好,又规范的API呢 参考以下link,可以得到需要有益的启示.同时个人推荐一本书<web API的设计和开发&g ...

  3. ASP.NET Web API中把分页信息放Header中返回给前端

    谈到ASP.NET Web API的分页,考虑的因素包括: 1.上一页和下一页的uri2.总数和总页数3.当前页和页容量 接着是服务端的数据以怎样的形式返回? 我们通常这样写: {    totalC ...

  4. web.py+html+mysql实现web端小系统的问题汇总

    利用web.py+html(bootstrap)+mysql实现了一个小型的设备管理系统,在这个过程中遇到很多问题,将问题及解决方案总结如下,有遇到类似问题的同学,希望可以帮到你们. 1.关于中文的编 ...

  5. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

  6. web.py simpletodo 例子

    一个很好的例子: 许多新手,特别是从 ASP/PHP/JSP 转过来的同学,经常问下面这几个问题: 所有东西都放在一个 code.py 中呀?我有好多东西该如何部署我的代码? 是不是 /index 对 ...

  7. web.py 学习(-)Rocket web框架

    Rocket是一个轻量级,多线程,符合WSGI规范的web框架. Rocket使用一个线程监听连接,接收到连接之后放到Queue中,有worker线程进行处理. Rocket含有以下属性: metho ...

  8. Web.py 框架学习笔记 - URL处理

    最近由于工作需要开始学习基于python的web应用框架web.py.为了方便学习,将学习心得逐日记下以便日后复习. URL 模板: web.py提供了一套url处理的模板,在python工程中,只需 ...

  9. 【Python】【web.py】python web py入门-4-请求处理(上)

    python web py入门-4-请求处理(上) 2017年09月05日 23:07:24 Anthony_tester 阅读数:2907 标签: webpy入门请求处理 更多 个人分类: Pyth ...

  10. web.py使用要点

    这几天有一个构建restful services的需求,我采用了web.py,之前并没有使用过,但在使用中确实给我带来了很多惊喜.当然,最大的惊喜就是简单,方便.之前开发restful服务的时候,采用 ...

随机推荐

  1. 读Java8函数式编程笔记07_设计和架构的原则

    1. SOLID原则 1.1. 开发良好面向对象程序的准则 1.2. Liskov substitution里氏替换 1.3. Interface segregation接口隔离 1.4. Singl ...

  2. immutable.js学习笔记(二)----- List

    一.List list与数组是兼容的,大多数的api与数组是类似的 注意 List.of(),不需要写中括号 二.List的API (一)size:取得 List 的长度 (二)set:设定指定下标的 ...

  3. Java的两个好用的工具包 Apache commons

    Apache commons 介绍 这是apache commons lang3的工具类的截图 这个工具,小皮一般用在业务层较多 这是apache commons codec下面的工具 这个工具包,今 ...

  4. Vue32 插槽

    1 简介 是一种组件间通信的方式,让父组件可以向子组件指定位置插入 html 结构.子组件中的提供给父组件使用的一个占位标签,用<slot></slot> 表示,父组件可以在这 ...

  5. centos7 在线或离线安装python3

    1.前言 本文会使用到yum和wget,如果两者都不能用,参考安装教程 https://www.cnblogs.com/dennisdong/p/17037248.html 2.查看是否安装wget和 ...

  6. 真正“搞”懂HTTPS协议17之TLS握手

    经过前两章的学习,我们知道了通信安全的定义以及TLS对其的实现~有了这些知识作为基础,我们现在可以正式的开始研究HTTPS和TLS协议了.嗯--现在才真正开始. 我记得之前大概聊过,当你在浏览器的地址 ...

  7. ubuntu18.08安装eigen

    http://eigen.tuxfamily.org/index.php?title=Special%3AAllPages&from=&to=&namespace=100 除非 ...

  8. C++练习3 定义带默认值的参数

    通过void func 定义函数的默认值和其可以容纳多少个实参 1 #include <iostream> 2 using namespace std; 3 void func(int a ...

  9. bootstrap怎么让手机端电脑端自适应显示隐藏元素

    我用的是bootstrap v3 这是电脑端: 这是手机端: 其实很简单:我用的 visible-lg 弄了半天才发现md是中等屏幕可见,所以要用lg 代码如下: 一行一共是12,我这里有3个元素,所 ...

  10. 初学 Canvas

    画布的概念 Canvas(画布)可以用于动画.游戏画面.数据可视化.图片编辑以及实时视频处理等方面.画布在 HTML5 中是通过canvas标签来表现,通过 JavaScript 提供的画布 API, ...