web.py 中的分页设计
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 中的分页设计的更多相关文章
- 浅谈python web框架中的orm设计
看了一下廖雪峰的那个web框架,其实就是封装了web.py,请求使用异步并将aiomysql做为MySQL数据库提供了异步IO的驱动,前端部分则整合了jinja.其中最难的应该是orm部分了. 下面是 ...
- RESTful Web Services中API的设计原则(转)
当下前后端分离的设计已经是web app开发的标配,但是如何设计一个强壮,扩展性好,又规范的API呢 参考以下link,可以得到需要有益的启示.同时个人推荐一本书<web API的设计和开发&g ...
- ASP.NET Web API中把分页信息放Header中返回给前端
谈到ASP.NET Web API的分页,考虑的因素包括: 1.上一页和下一页的uri2.总数和总页数3.当前页和页容量 接着是服务端的数据以怎样的形式返回? 我们通常这样写: { totalC ...
- web.py+html+mysql实现web端小系统的问题汇总
利用web.py+html(bootstrap)+mysql实现了一个小型的设备管理系统,在这个过程中遇到很多问题,将问题及解决方案总结如下,有遇到类似问题的同学,希望可以帮到你们. 1.关于中文的编 ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- web.py simpletodo 例子
一个很好的例子: 许多新手,特别是从 ASP/PHP/JSP 转过来的同学,经常问下面这几个问题: 所有东西都放在一个 code.py 中呀?我有好多东西该如何部署我的代码? 是不是 /index 对 ...
- web.py 学习(-)Rocket web框架
Rocket是一个轻量级,多线程,符合WSGI规范的web框架. Rocket使用一个线程监听连接,接收到连接之后放到Queue中,有worker线程进行处理. Rocket含有以下属性: metho ...
- Web.py 框架学习笔记 - URL处理
最近由于工作需要开始学习基于python的web应用框架web.py.为了方便学习,将学习心得逐日记下以便日后复习. URL 模板: web.py提供了一套url处理的模板,在python工程中,只需 ...
- 【Python】【web.py】python web py入门-4-请求处理(上)
python web py入门-4-请求处理(上) 2017年09月05日 23:07:24 Anthony_tester 阅读数:2907 标签: webpy入门请求处理 更多 个人分类: Pyth ...
- web.py使用要点
这几天有一个构建restful services的需求,我采用了web.py,之前并没有使用过,但在使用中确实给我带来了很多惊喜.当然,最大的惊喜就是简单,方便.之前开发restful服务的时候,采用 ...
随机推荐
- 读Java8函数式编程笔记07_设计和架构的原则
1. SOLID原则 1.1. 开发良好面向对象程序的准则 1.2. Liskov substitution里氏替换 1.3. Interface segregation接口隔离 1.4. Singl ...
- immutable.js学习笔记(二)----- List
一.List list与数组是兼容的,大多数的api与数组是类似的 注意 List.of(),不需要写中括号 二.List的API (一)size:取得 List 的长度 (二)set:设定指定下标的 ...
- Java的两个好用的工具包 Apache commons
Apache commons 介绍 这是apache commons lang3的工具类的截图 这个工具,小皮一般用在业务层较多 这是apache commons codec下面的工具 这个工具包,今 ...
- Vue32 插槽
1 简介 是一种组件间通信的方式,让父组件可以向子组件指定位置插入 html 结构.子组件中的提供给父组件使用的一个占位标签,用<slot></slot> 表示,父组件可以在这 ...
- centos7 在线或离线安装python3
1.前言 本文会使用到yum和wget,如果两者都不能用,参考安装教程 https://www.cnblogs.com/dennisdong/p/17037248.html 2.查看是否安装wget和 ...
- 真正“搞”懂HTTPS协议17之TLS握手
经过前两章的学习,我们知道了通信安全的定义以及TLS对其的实现~有了这些知识作为基础,我们现在可以正式的开始研究HTTPS和TLS协议了.嗯--现在才真正开始. 我记得之前大概聊过,当你在浏览器的地址 ...
- ubuntu18.08安装eigen
http://eigen.tuxfamily.org/index.php?title=Special%3AAllPages&from=&to=&namespace=100 除非 ...
- C++练习3 定义带默认值的参数
通过void func 定义函数的默认值和其可以容纳多少个实参 1 #include <iostream> 2 using namespace std; 3 void func(int a ...
- bootstrap怎么让手机端电脑端自适应显示隐藏元素
我用的是bootstrap v3 这是电脑端: 这是手机端: 其实很简单:我用的 visible-lg 弄了半天才发现md是中等屏幕可见,所以要用lg 代码如下: 一行一共是12,我这里有3个元素,所 ...
- 初学 Canvas
画布的概念 Canvas(画布)可以用于动画.游戏画面.数据可视化.图片编辑以及实时视频处理等方面.画布在 HTML5 中是通过canvas标签来表现,通过 JavaScript 提供的画布 API, ...