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

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
H
Help Net Security
V
Visual Studio Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
The Cloudflare Blog
Martin Fowler
Martin Fowler
D
Docker
腾讯CDC
F
Fortinet All Blogs
雷峰网
雷峰网
GbyAI
GbyAI
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - 叶小钗

博客园 - 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、效果