将大型结果集划分为多个页面以便于浏览

paginate的Python项目详细描述


什么是分页?
----
此模块有助于将大型项目列表划分为多个页面。用户一次显示一个页面,并且
可以导航到其他页面。假设您提供一个公司电话簿,让用户搜索
条目。如果搜索结果包含23个条目,但您可能希望一次显示的条目不超过10个。第一页包含条目1-10、第二页11-20和第三页21-23。有关详细信息,请参阅"page"类的
文档。

如何使用此模块?
----------
分页模块包含大量的联机文档和示例。


关于webhelpers
--------
这是一个独立的模块。以前的版本作为
webhelpers.paginate包含在webhelpers python模块中,并且与webhelpers和pylons web框架紧密耦合。这个
版本的目的是独立于任何web框架使用。


子类化page()
----
这个模块支持通过类列表对象分页。要对其他类型的对象进行分页,可以对paginate.page()类进行子类化,并提供一个包装类,该包装类定义如何访问该特殊集合的元素。

可以在paginate-sqlalchemy等其他分页模块中找到示例。基本上,您需要
提供一个实现初始化、获取项和长度方法的类。


"访问集合元素的包装类。""
def初始(self,obj):
self.obj=obj

def getitem(self,范围:
返回sqlalchemy.orm.query.query对象的范围
返回self.obj[range]

def len(self):
计算sqlalchemy.orm.query.query对象中的对象数
返回self.obj.count()

然后您可以创建自己的页类,该页类使用上述包装类::


class sqlalchemy orm page(paginate.page):
"处理sqlalchemy orm对象的页。"**kwargs):
超级(sqlalchemyormpage,self)。
它基本上调用paginate.page.\uu init\uu并添加
wrapper=sqlalchemyormwrapper作为参数。paginate.page实例将使用该包装器
类访问元素。




可选,但我们为这个示例传递一个虚拟的空结果集
pattern='$link_first$link_previous~4~$link_next$link_last(page$page our of$page_count-total$item_count)'
p.pager(pattern,url='http://foo.com?x=$page',dotdot掼attr={'x':5},link掼attr={'y':6},curpage掼attr={'z':77})
掼attr参数是可选的,可用于将其他类/attr附加到标记


x=1">;<;<;<;/a>;<;a class="l"href="url?x=14">;<;<;/a>;<;a class="l"href="url?x=1">;1<;/a>;<;span class="d">;。<;/span>;<;a class="l"href="url?x=11">;11<;/a>;<;a class="l"href="url?x=12">;12<;/a>;<;a class="l"href="url?x=13">;13<;/a>;<;a class="l"href="url?x=14">;14<;/a>;<;span class="c">;15<;/span>;<;a class="l"href="url?x=16">;16<;/a>;<;a class="l"href="url?x=17">;17<;/a>;<;a class="l"href="url?X=18">;18<;/A>;<;分类ss="l"href="url?x=19">;19<;/a>;<;span class="d">;。<;/span>;<;a class="l"href="url?x=68">;68<;/a>;<;a class="l"href="url?x=16">;>;<;/a>;<;a class="l"href="url?x=68">;>;>;<;/a>;(第15页,共68页,共1010个项目)


使用url maker生成指向特定结果范围的链接
---------------------------

对于给定的数字,
必须接受一个int参数并返回一个uri字符串。


例如:


deurl-maker(page-maker(page-num):
return str('foo/%s%page-num)
page=paginate.page(range(100),page=1,url-maker=url-maker)
eq(page.pager(),'1<;a a href="foo/2">;2<;lt;a<;lt;a<;lt;lt;lt;a;a a a href="foo/3">;3>;3>;3>;3>;3>;3中尉;…<;a href="foo/5">;5<;/a>;')






或者,如果不传递链接生成器函数,pager()方法也可以接受包含页链接将指向的url的"url"参数。
请确保它包含字符串$page,该字符串将被实际页码替换。
必须给出,除非url生成器指定为"初始化",在这种情况下将忽略此参数。

拥有自己的模板。

示例:

p.link_map('$link_first$link_previous~4~$link_next$link_last(page$page our of$page_count-total items$item_count)',url='url?x=$page',dottot嫒u attr={'class':'d'},link嫒u attr={'class':'l'},curpage嫒u attr={'class':'c'})


返回如下内容::

{'current嫒page':{'attrs':{'class':'c'},'ref':'url?x=15,'值':15},
'第一页':{'attrs':{'class':'l'},'ref':'url?x=1,'类型':'第一页','值':1},
'最后一页':{'attrs':{'class':'l'},'ref':'url?x=68,'类型':'上一页','值':68},
'下一页':{'attrs':{'class':'l'},'ref':'url?x=16','类型':'下一页','值':16},
'上一页':{'attrs':{'class':'l'},'ref':'url?x=14,'类型':'上一页','值':14},
'范围页':[{'attrs':{'class':'d'},'ref':'','type':'span,'value':'…'},
{'attrs':{'class':'l'},'ref':'url?x=11,'类型':'页面','值':'11'},
{'attrs':{'class':'l'},'ref':'url?x=12,'类型':'页面','值':'12'},
{'attrs':{'class':'l'},'ref':'url?x=13,'类型':'页','值':'13'},
{'attrs':{'class':'l'},'ref':'url?x=14,'类型':'页','值':'14'},
{'attrs':{'class':'c'},'ref':'url?x=15,'类型':'当前页面','值':15},
{'attrs':{'class':'l'},'ref':'url?x=16,'类型':'页','值':'16'},
{'attrs':{'class':'l'},'ref':'url?x=17,'类型':'页面','值':'17'},
{'attrs':{'class':'l'},'ref':'url?x=18,'类型':'页面','值':'18'},
{'attrs':{'class':'l'},'ref':'url?x=19,'类型':'页','值':'19'},
{'attrs':{'class':'d'},'资源':'','类型':'span,'值':'…'}],
"radius":4}



轻松覆盖生成链接的方式。




示例::


从分页导入页,使"html"标记


def paginate链接标记(项):
"
"创建一个a-ref标记,该标记指向可在分页中使用的另一页。
"
a-u标记=页。默认链接_tag(item)
如果item['type']='当前页面':
返回make_html_标记('li',a_标记,**{'class':'active'})
返回make_html_标记('li',a_标记)

paginator.pager(
curpage_attr={'class':'current_page'},
dottot_attr={'class':'spacer'},
symbol庠first='<;i class="fa fa chevron circle left">;<;/i>;',
symbol庠last='<;i class="fa fa chevron circle right">;<;/i>;',
symbol庠previous='<;i class="fa fa chevron left">;<;/i>;',
symbol庠next='<;i class="fa chevron right">;,
link_tag=paginate_link_tag)





0.5.5版-2016-11-22
-
-
更改:
-python 2.7/3.4+兼容性改进


0.5.4版-2016-04-25
-
更改:
-添加半径大小配置选项



0.5.3版-2016-03-09
在结果中包含项计数的数据库
-错误修复

0.5.1-2015-10-22
自定义链接标记
-页面对象现在有link_map()方法,该方法返回用于生成基于分页器数据的自定义标记的信息映射

0.4.0-2012-12-06版本Webhelpers软件包。
此版本是独立版本,在Webhelpers的
上下文之外应该很有用。

更改:
-python 3兼容性。
-sqlalchemyobject和sqlalchemyquery集合不再自动检测。
相反,您可以使用paginate_sqlalchemy模块中的相应页类也
在pypi上可用。
-不再支持预许可的列表参数
-'page_nr'和'current_page'已被弃用,现在已被删除。请使用"page"
代替。
-不自动生成URL。您需要向page.pager()方法传递一个'url'参数
,该方法包含一个$page占位符,您希望将页码放在其中。请注意,url
不会被进一步转义。
-page.pager()不再自动添加css类。如果您想要旧的
行为,则需要显式传递这些参数:
link戋attr={class':'pager戋link'}
curpage戋attr={class':'pager戋curpage'}
dotdot戋attr={class':'pager戋dotdot'}
-page.pager()中的部分参数已不存在。"url"参数中的
ajax/部分更新应使用自己的url。
-page.pager()中的page_param参数也将消失,因为url生成已被严重简化。
-page.pager()返回的字符串已由转义html组成。因此,您需要告诉
您的web框架使用字符串,而无需进一步转义。
参数symbol_first、symbol_last、symbol_previous和symbol_next使用
<;和&;gt;而不是"<;"和">;"现在。
-第页。现在返回一个简短的表示。例如,<;paginate.page:1 of 1>;
page.\uuu str_uuu返回您可以使用的详细视图。

0.3.2-2008-01-31版

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
异常如何在java中优雅地处理FileNotFoundexception   java线程卡在BlockingQueue上。无缘无故   类网格程序w/java   StrutsJava:动态应用Velocity脚本   java在运行时重写/禁用方面   java Apache POI无法正确读取Excel单元格中的秒数   具有不同用户权限的Java文件夹/文件创建   java我可以检查Firebase ValueEventListener onDataChanged是否已被调用吗?   尽管获得了用户权限,java Android开发文件权限仍被拒绝   java如何使用JPA映射map<EnumType,Double>?   java是否使用UI线程显示toast消息?   JAVAlang.IllegalArgumentException:不支持的元素:rss   java Android setRequestedOrientation活动和视图生命周期   安卓如何在Java中定义支票盒?   在Java中,对于大输入,字符串解析长期失败   使Java在XP中按计划任务运行读取env用户变量时出现问题   任务“:workflowsjava:NodeDriver”的梯度执行失败。main()   java如何检测是否只设置了部分属性?   在客户端web服务上使用JBossWS时,java无法找到/更改log4j的默认配置   java LibGDX写入文本文件并接收各种错误