惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
博客园 - 司徒正美
罗磊的独立博客
D
Docker
Last Week in AI
Last Week in AI
爱范儿
爱范儿
M
MIT News - Artificial intelligence
V
V2EX
Google DeepMind News
Google DeepMind News
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
V
Visual Studio Blog
博客园 - 叶小钗
B
Blog RSS Feed
A
About on SuperTechFans
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
P
Proofpoint News Feed

博客园 - daivlin

layuimini模板的快速浏览方法 inux mint使用 迅雷电影天堂 2025-02-08[] GIS图模解析工具 常用工具下载链接 数据分析学习 用python从网页下载单词库 如何将手机微信公众号文章导出到办公电脑 U盘插上电脑上后自动备份文件 python 通过win32com操作vcf到outlook中,同时解决乱码问题 pythonanywhere 部署 webpy linux mint 中文支持 django学习记录 用python脚本通过excel生成文件夹树结构 selenium + phantomjs 爬取落网音乐 centos 安装 python2.7 运行webpy 项目 跳过 centos部署 webpy的各种坑 unix&linux大学教程 目录
web.py 中的分页设计
daivlin · 2020-06-06 · via 博客园 - daivlin

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、效果