简述
ps[2016.2.13]:更新一个问题,下面的源代码有误,具体往下看.
ps[2016.2.27]:将原来的函数组成一个类,完全兼容原来的使用方式.
# 错误代码*****************************
'''
htmls = htmls.append(
liahref % (
currentpage, url, lenindex, ipagesize, currentpage,
lenindex) if lenindex == noformatpage else liahref % (
pageclass,
url, lenindex, ipagesize, pageclass, lenindex))
'''
# 错误代码***********************************************************
# 正确代码*****************************
htmls.append(
liahref % (
currentpage, url, lenindex, ipagesize, currentpage,
lenindex) if lenindex == noformatpage else liahref % (
pageclass,
url, lenindex, ipagesize, pageclass, lenindex))
# 正确代码***********************************************************
这是一个伪代码,因分页需要数据库配合,所以这里只给出分页的代码.
源码
代码里面有很详细的注释,不在过于解释了.
v1.0[2016.2.27]:
"""
分页程序. 2016.2.27 add
"""
class Pager(object):
"""
生成代码示例[使用了妹子UI的分页.参照:http://amazeui.org/widgets/pagination]:
page: 当前页数,从1开始.
pagesize: 每页里面多少数据,一般为10.
rowscount: 查询数据库中的总数(一共有多少条数据,不能添加查询条件,直接count即可).
url: 访问地址[注意:这里没有处理url本身带有参数的问题],这里自动添加了page和pagesize参数(!!丢弃了原来的所有参数,若有的话)
countshow=Flase:默认不显示(总XXX条,共XX页,当前X页),如需开启,请传递True.
"""
def repage(self, page, pagesize, rowscount, url,countshow=False):
# 页码
ipage = int(page)
# 原始page ,数值不会被改变
noformatpage = int(page) # 原始page
# 页码大小
ipagesize = int(pagesize)
# 总数量
irowscount = int(rowscount)
# 进行数值限定
if ipage <= 1:
ipage = 1
# 进行分页查询时,需要跳过的数据.
# 这个ipage和noformatpage是有区别的!!!
# 例如,当前是第二页,那么下面这个ipage是10,而noformatpage是不变的2.
ipage = (ipage - 1) * ipagesize
# 给当前页添加一个css标记
currentpage = "am-active" # 当前
# 不添加标记
pageclass = "" # 正常
# 空包标记,用于替换.
black = "" '''
格式化数据.
主要作用:
大于/小于当前页5个的自动隐藏.
比如:
当前是第6页,那么只显示1-11页,并且第6页在中间.
示例如下:
1,2,3,4,5,[6],7,8,9,10,11
第8页的时候:
3,4,5,6,7,[8],9,10,11,12,13
以此类推...
''' def formatstyle(item, noformatpage):
# 标记最大隐藏的.可配置.
maxhidden = noformatpage + 5
# 标记最小隐藏的.可配置
minhidden = noformatpage - 5
# 为当前页添加css标记.
if item == noformatpage:
return liahref % (currentpage, black, url, item, ipagesize, currentpage, item)
elif (minhidden) <= item <= (maxhidden):
# 这个地方是控制显示的,只有符合当前页+5或者-5之内的才显示.
return liahref % (
pageclass, black,
url, item,
ipagesize,
pageclass,
item)
else: # 不满足条件的全都隐藏.
return liahref % (
pageclass, hiddenstyle,
url, item,
ipagesize,
pageclass,
item) # 隐藏数据.
hiddenstyle = "display:none;"
'''
%1: 添加各种class,在这里就是:标记当前页.
%2: 设置隐藏/显示(通过css控制)
%3: url地址,不带参数的url地址.
%4: 当前页码,从1开始.
%5: 数据大小.
%6: 标记当前页.
%7: 显示的名称.
'''
liahref = "
"
# 循环生成数据,并且使用formatstyle控制显示或隐藏.
htmls = [formatstyle(item, noformatpage) for item in range(0, irowscount // ipagesize)]
# 获取总页数
countpage = len(htmls)
# 处理余数的情况
if irowscount % ipagesize != 0:
# 最后一页.
lenindex = len(htmls) + 1
# 赋值给总页数
countpage = lenindex
# 新增到最后.
print(pageclass)
print(url)
print(lenindex)
print(ipagesize)
print(pageclass)
print(lenindex)
# liahref % ("", "http://localhost:5000/admin/list",68,10, "", 68)
htmls.append(liahref % (
currentpage,black, url, lenindex, ipagesize, currentpage,
lenindex) if lenindex == noformatpage else liahref % (
pageclass,black, url, lenindex, ipagesize, pageclass, lenindex))
# 正确代码***********************************************************
# 参考上面的a,只是去掉了外层的li标记
ahref = "%s"
# 第一页和上一页
firsthrefdisabled = "am-disabled"
# 生成默认禁用数据
prevhref = "上一页"
firsthref = "第一页"
# 只有当大于1的时候第一页和上一页才可以用.
if noformatpage > 1:
firsthrefdisabled = black
prevhref = ahref % (url, (noformatpage - 1), ipagesize, currentpage, '上一页')
firsthref = ahref % (url, 1, ipagesize, currentpage, '第一页') if 1 == noformatpage else ahref % (
url, 1, ipagesize, pageclass, '第一页')
# 新增到最前面
htmls.insert(0,
"
" % (
firsthrefdisabled, firsthref, firsthrefdisabled,
prevhref))
# 第一页和上一页END.
# 下一页和最末页
lasthrefdisabled = "am-disabled"
# 生成默认禁用数据
nexthref = "下一页"
lastindexhref = "最末页"
# 只有当小于总数的时候下一页和最末页才可用.
if noformatpage < (countpage):
lasthrefdisabled = black
nexthref = ahref % (url, (noformatpage + 1), ipagesize, currentpage, '下一页')
lastindexhref = ahref % (url, countpage, ipagesize, currentpage, '最末页') htmls.append(
"
" % (
lasthrefdisabled, nexthref, lasthrefdisabled, lastindexhref))
# 下一页和最末页END.
# 显示最后的数据.
if countshow:
htmls.append("总%s条,共%s页,当前%s页" % (irowscount, (len(htmls) - 2), page))
return ipage, ipagesize, ''.join(htmls)
v0.9[建议使用最新版本.]:
'''
v0.9[建议使用最新版本.]
这是一个分页的伪代码[使用了Flask(不过实际使用什么也无所谓)].
效果可以看[Pagination.png]图片.
涉及到数据库和返回给前台.
这里只提供了一个分页的方法,注释很详细.
prd.
pruidong@gmail.com
2015.12.30
'''
'''
分页程序.
生成代码示例[使用了妹子UI的分页.参照:http://amazeui.org/widgets/pagination]:
总840条,共83页,当前6页
page: 当前页数,从1开始.
pagesize: 每页里面多少数据,一般为10.
rowscount: 查询数据库中的总数(一共有多少条数据,不能添加查询条件,直接count即可).
url: 访问地址[注意:这里没有处理url本身带有参数的问题],这里自动添加了page和pagesize参数(!!丢弃了原来的所有参数,若有的话)
v0.9[建议使用最新版本.]
'''
def repage(page, pagesize, rowscount, url):
# 页码
ipage = int(page)
# 原始page ,数值不会被改变
noformatpage = int(page) # 原始page
# 页码大小
ipagesize = int(pagesize)
# 总数量
irowscount = int(rowscount)
# 进行数值限定
if ipage <= 1:
ipage = 1
# 进行分页查询时,需要跳过的数据.
# 这个ipage和noformatpage是有区别的!!!
# 例如,当前是第二页,那么下面这个ipage是10,而noformatpage是不变的2.
ipage = (ipage - 1) * ipagesize
# 给当前页添加一个css标记
currentpage = "am-active" # 当前
# 不添加标记
pageclass = "" # 正常
# 空包标记,用于替换.
black = ""
'''
格式化数据.
主要作用:
大于/小于当前页5个的自动隐藏.
比如:
当前是第6页,那么只显示1-11页,并且第6页在中间.
示例如下:
1,2,3,4,5,[6],7,8,9,10,11
第8页的时候:
3,4,5,6,7,[8],9,10,11,12,13
以此类推...
'''
def formatstyle(item, noformatpage):
# 标记最大隐藏的.可配置.
maxhidden = noformatpage + 5
# 标记最小隐藏的.可配置
minhidden = noformatpage - 5
# 为当前页添加css标记.
if item == noformatpage:
return liahref % (currentpage, black, url, item, ipagesize, currentpage, item)
elif (minhidden) <= item <= (maxhidden):
# 这个地方是控制显示的,只有符合当前页+5或者-5之内的才显示.
return liahref % (
pageclass, black,
url, item,
ipagesize,
pageclass,
item)
else: # 不满足条件的全都隐藏.
return liahref % (
pageclass, hiddenstyle,
url, item,
ipagesize,
pageclass,
item)
# 隐藏数据.
hiddenstyle = "display:none;"
'''
%1: 添加各种class,在这里就是:标记当前页.
%2: 设置隐藏/显示(通过css控制)
%3: url地址,不带参数的url地址.
%4: 当前页码,从1开始.
%5: 数据大小.
%6: 标记当前页.
%7: 显示的名称.
'''
liahref = "
"
# 循环生成数据,并且使用formatstyle控制显示或隐藏.
htmls = [formatstyle(item, noformatpage) for item in range(1, irowscount // ipagesize)]
# 获取总页数
countpage = len(htmls)
# 处理余数的情况
if irowscount % ipagesize != 0:
# 最后一页.
lenindex = len(htmls) + 1
# 赋值给总页数
countpage = lenindex
# 新增到最后.
# 错误代码*****************************
'''
htmls = htmls.append(
'''
# 错误代码***********************************************************
# 正确代码*****************************
htmls.append(liahref % (currentpage, url, lenindex, ipagesize, currentpage,lenindex) if lenindex == noformatpage else liahref % (pageclass,url, lenindex, ipagesize, pageclass, lenindex))
# 正确代码***********************************************************
#参考上面的a,只是去掉了外层的li标记
ahref = "%s."
# 第一页和上一页
firsthrefdisabled = "am-disabled"
# 生成默认禁用数据
prevhref = "上一页"
firsthref = "第一页"
# 只有当大于1的时候第一页和上一页才可以用.
if noformatpage > 1:
firsthrefdisabled = black
prevhref = ahref % (url, (noformatpage - 1), ipagesize, currentpage, '上一页')
firsthref = ahref % (url, 1, ipagesize, currentpage, '第一页') if 1 == noformatpage else ahref % (
url, 1, ipagesize, pageclass, '第一页')
# 新增到最前面
htmls.insert(0,
"
" % (
firsthrefdisabled, firsthref, firsthrefdisabled,
prevhref))
# 第一页和上一页END.
# 下一页和最末页
lasthrefdisabled = "am-disabled"
# 生成默认禁用数据
nexthref = "下一页"
lastindexhref = "最末页"
# 只有当小于总数的时候下一页和最末页才可用.
if noformatpage < (countpage):
lasthrefdisabled = black
nexthref = ahref % (url, (noformatpage + 1), ipagesize, currentpage, '下一页')
lastindexhref = ahref % (url, countpage, ipagesize, currentpage, '最末页')
htmls.append(
"
" % (
lasthrefdisabled, nexthref, lasthrefdisabled, lastindexhref))
# 下一页和最末页END.
# 显示最后的数据.
htmls.append("总%s条,共%s页,当前%s页" % (irowscount, (len(htmls) - 2), page))
return ipage, ipagesize, ''.join(htmls)
@app.route('/indexs', methods=['POSTS', 'GET'])
def seetext():
page = request.args.get('page', 1)
pagesize = request.args.get('pagesize', 10)
see = SeeText()
# 获取总数--不要带条件!!!
rowscount = see.count()
# 参数请参考方法说明.
pageinfo = repage(page=page, pagesize=pagesize, rowscount=rowscount, url=request.base_url)
# 查询数据
data = see.findAll(page[0], pagesize)
# 转换一下,第二项是分页的数据.
pageinfo = ''.join(pageinfo[2])
# 返回数据给前台
return render_template("/index/index.html", seetextdata=data, pageInfo=pageinfo)