python-paginate
Port variant v12
Summary Divides large result sets into pages (3.12)
Package version 0.5.6
Homepage https://github.com/Signum/paginate
Keywords python
Maintainer Python Automaton
License Not yet specified
Other variants v11
Ravenports Buildsheet | History
Ravensource Port Directory | History
Last modified 09 OCT 2023, 04:40:21 UTC
Port created 22 AUG 2023, 00:47:13 UTC
Subpackage Descriptions
single What is pagination? --------------------- This module helps dividing large lists of items into pages. The user is shown one page at a time and can navigate to other pages. Imagine you are offering a company phonebook and let the user search the entries. If the search result contains 23 entries but you may want to display no more than 10 entries at once. The first page contains entries 1-10, the second 11-20 and the third 21-23. See the documentation of the "Page" class for more information. How do I use this module? --------------------------- The paginate module contains extensive in-line documentation with examples. Concerning WebHelpers ----------------------- This is a standalone module. Former versions were included in the WebHelpers Python module as webhelpers.paginate and were tightly coupled with the WebHelpers and the Pylons web framework. This version aims to be useful independent of any web framework. Subclassing Page() ------------------ This module supports pagination through list-like objects. To paginate though other types of objects you can subclass the paginate.Page() class and provide a wrapper class that defines how to access elements of that special collection. You can find examples in other paginate_* modules like paginate_sqlalchemy. Basically you would have to provide a class that implements the __init__, __getitem__ and __len__ methods. It is trivial to make pagination for other datastores like Elasticsearch/Solr extending the base class. Example:: class SqlalchemyOrmWrapper(object): """Wrapper class to access elements of a collection.""" def __init__(self, obj): self.obj = obj def __getitem__(self, range): # Return a range of objects of an sqlalchemy.orm.query.Query object return self.obj[range] def __len__(self): # Count the number of objects in an sqlalchemy.orm.query.Query object return self.obj.count() Then you can create your own Page class that uses the above wrapper class:: class SqlalchemyOrmPage(paginate.Page): """A pagination page that deals with SQLAlchemy ORM objects.""" def __init__(self, *args, **kwargs): super(SqlalchemyOrmPage, self).__init__(*args, wrapper_class=SqlalchemyOrmWrapper, **kwargs) As you can see it does not do much. It basically calls paginate.Page.__init__ and adds wrapper_class=SqlalchemyOrmWrapper as an argument. The paginate.Page instance will use that wrapper class to access the elements. Generating HTML come for current page ------------------------------------- Example:: p = paginate.Page([], page=15, items_per_page=15, item_count=1010) # item_count is optional, but we pass a dummy empty resultset for this example 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 arguments are optional and can be used to attach additional classes/attrs to tags Results in:: '<< < 1 .. 11 12 13 14 15 16 17 18 19 .. 68 > >> (Page 15 our of 68 - total items 1010)' Using url maker to generate links to specific result ranges ----------------------------------------------------------- You can pass `url_maker` Callback to generate the URL of other pages, given its numbers. Must accept one int parameter and return a URI string. Example::
Configuration Switches (platform-specific settings discarded)
PY311 OFF Build using Python 3.11 PY312 ON Build using Python 3.12
Package Dependencies by Type
Build (only) python312:dev:standard
python-setuptools:single:v12
autoselect-python:single:standard
Build and Runtime python312:primary:standard
Download groups
main mirror://PYPI/p/paginate
Distribution File Information
5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d 12840 paginate-0.5.6.tar.gz
Ports that require python-paginate:v12
python-mkdocs-material:v12 Documentation that simply works (3.12)