{ "info": { "author": "saaj", "author_email": "mail@saaj.me", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Topic :: Software Development :: Libraries" ], "description": ".. image:: https://badge.fury.io/py/PageCalc.png\r\n :target: https://pypi.python.org/pypi/PageCalc\r\n \r\n********\r\nPageCalc\r\n********\r\n\r\nPageCalc is a *Python* `pagination `_ library. In contrary \r\nto many auto-magical solutions this package is just a calculator. I.e. it doesn't interfere with \r\ndatabase queries, result-sets, collection or what not. Nor it is involved in templating. The \r\npurpose of the package is calculation of pages based on:\r\n \r\n* total item number,\r\n* items per page,\r\n* current page,\r\n* number of pages to display,\r\n* pagination style.\r\n \r\nThe package can be used to paginate models designed for a paged listing and to \r\nhandle external pre-paginated data sources. Basically the idea is same as in \r\n`this Flask snippet `_. \r\n\r\nReturn value of ``Paginator.paginate`` is a ``dict`` that has the following structure:\r\n\r\n.. sourcecode:: python\r\n\r\n {\r\n 'item' : {\r\n # actual number of items at current page \r\n 'pageCount' : 20,\r\n # items per page \r\n 'perPage' : 20,\r\n # total number of items\r\n 'totalCount' : 987\r\n },\r\n 'page' : {\r\n # total number of pages\r\n 'count' : 50,\r\n # number of current page\r\n 'current' : 44,\r\n # number of first page\r\n 'first' : 1,\r\n # number of last page\r\n 'last' : 50,\r\n # number of next page, None for last page\r\n 'next' : 45,\r\n # number of previous page, None for first page\r\n 'previous' : 43,\r\n # displaying window page range\r\n 'range' : [41, 42, 43, 44]\r\n }\r\n } \r\n\r\nFor more details look at the package's \r\n`test suite `_.\r\n\r\n\r\nPagination styles\r\n=================\r\nThe package provides two pagination styles.\r\n\r\nSliding\r\n-------\r\nActive page stays in center of displayed pages, except for beginning and ending pages. Displayed\r\npage window advances with active page, making it slide. \r\n\r\n.. sourcecode:: text\r\n\r\n [1] 2 3 4 \u00bb \u2192\r\n \u2190 \u00ab 1 [2] 3 4 \u00bb \u2192\r\n \u2190 \u00ab 2 [3] 4 5 \u00bb \u2192\r\n \u2190 \u00ab 3 [4] 5 6 \u00bb \u2192\r\n \u2190 \u00ab 4 [5] 6 7 \u00bb \u2192\r\n \u2190 \u00ab 4 5 [6] 7 \u00bb \u2192\r\n \u2190 \u00ab 4 5 6 [7]\r\n \r\nJumping\r\n-------\r\nActive page moves from lower to upper bound of displayed page window. When active page is a\r\nlast page of the window, next move makes the window jump to next page rage.\r\n\r\n.. sourcecode:: text\r\n\r\n [1] 2 3 4 \u00bb \u2192\r\n \u2190 \u00ab 1 [2] 3 4 \u00bb \u2192\r\n \u2190 \u00ab 1 2 [3] 4 \u00bb \u2192\r\n \u2190 \u00ab 1 2 3 [4] \u00bb \u2192\r\n \u2190 \u00ab [5] 6 7 \u00bb \u2192\r\n \u2190 \u00ab 5 [6] 7 \u00bb \u2192\r\n \u2190 \u00ab 5 6 [7] \r\n\r\n\r\nUsage\r\n=====\r\n\r\nIn controller code, on *CherryPy* example, it can look something like:\r\n\r\n.. sourcecode:: python\r\n\r\n class Controller:\r\n \r\n @cherrypy.expose\r\n def news(self, page = 1):\r\n page = int(page)\r\n model = Model()\r\n paginator = pagecalc.Paginator(total = model.count(), by = 10)\r\n \r\n data = model.list(page, limit = 10)\r\n pages = paginator.paginate(page)\r\n \r\n return template.render(data = data, paginator = pages)\r\n \r\n \r\nPagination *Jinja2* template can look like:\r\n\r\n.. sourcecode:: html\r\n\r\n {% if paginator and paginator.page.count > 1 %}\r\n
\r\n Pages:\r\n {% if paginator.page.previous %}\r\n \u2190\r\n \u00ab\r\n {% endif %}\r\n {% for page in paginator.page.range %}\r\n \r\n {{ page }}\r\n \r\n {% endfor %}\r\n {% if paginator.page.next %}\r\n \u00bb\r\n \u2192\r\n {% endif %}\r\n
\r\n {% endif %}\r\n\r\n\r\nExample app\r\n-----------\r\nThe package contains an example app that demonstrates pagination and the styles. To run it, \r\ntype in terminal:\r\n\r\n.. sourcecode:: text\r\n \r\n virtualenv pagecalctest\r\n source pagecalctest/bin/activate\r\n pip install pagecalc\r\n pip install cherrypy\r\n pip install jinja2\r\n python pagecalctest/lib/python2.7/site-packages/pagecalc/example/app.py\r\n \r\nThen navigate your browser to ``_. Note, that last path may vary depending \r\non platform and *Python* version.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/saaj/pagecalc", "keywords": "python pagination", "license": "LGPL-2.1+", "maintainer": "", "maintainer_email": "", "name": "PageCalc", "package_url": "https://pypi.org/project/PageCalc/", "platform": "Any", "project_url": "https://pypi.org/project/PageCalc/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/saaj/pagecalc" }, "release_url": "https://pypi.org/project/PageCalc/0.2.3/", "requires_dist": null, "requires_python": null, "summary": "Python pagination calculator", "version": "0.2.3" }, "last_serial": 2380650, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "0d2bfc57112fab399b90dfe2691268d4", "sha256": "da9c77c80904c1cebbdc20dc6ca0a9d448477f1367187b51bae4983c587c151f" }, "downloads": -1, "filename": "PageCalc-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0d2bfc57112fab399b90dfe2691268d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5193, "upload_time": "2013-12-27T10:04:09", "url": "https://files.pythonhosted.org/packages/99/2b/ae69b5200b5104dbc0c435a8df6d30f68367bcdb7faa8b1393957d2c6d8c/PageCalc-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "9069fbcd3350101f79dc3a1f915c6473", "sha256": "e534ee87f362f81715d9bddaf8f665409ebfc2f9f66dd59dc7107017c341929b" }, "downloads": -1, "filename": "PageCalc-0.2.0.tar.gz", "has_sig": false, "md5_digest": "9069fbcd3350101f79dc3a1f915c6473", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5341, "upload_time": "2014-04-08T10:45:06", "url": "https://files.pythonhosted.org/packages/1c/76/6a89d28578d428aa9a954a80d99c3de72ab94b99e7b45cb518ac4f9ecc44/PageCalc-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "15d55a029e5b5d9d83ebeecc7d7a399f", "sha256": "70a74a1ec3e9664fb69eed702fb03f9e7ec72429e5aa4a6e89f486e82512f782" }, "downloads": -1, "filename": "PageCalc-0.2.1.tar.gz", "has_sig": false, "md5_digest": "15d55a029e5b5d9d83ebeecc7d7a399f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5332, "upload_time": "2014-04-09T11:33:16", "url": "https://files.pythonhosted.org/packages/7b/98/0158240449ed54da149aaf0a43cc318fcde2ac9910346c020f2800ce94b5/PageCalc-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "1ad60ea76e699452599e2411049f24bc", "sha256": "2029047f8ac83b7e2359eb8fd55f5ae1bd30f57fe551fc796ce3175300b9a747" }, "downloads": -1, "filename": "PageCalc-0.2.2.tar.gz", "has_sig": false, "md5_digest": "1ad60ea76e699452599e2411049f24bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5738, "upload_time": "2015-03-13T12:17:17", "url": "https://files.pythonhosted.org/packages/65/62/dad387cf422dc49ec89b33b66ba8352f1786f7e73561ab6c0a31dca4f538/PageCalc-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "ffdbd3b35461a46858d7ecfb71097d3b", "sha256": "82b09f8841431fbb062950720a6ded36987ba58d36ec6b1a0d0b7fb6e587837d" }, "downloads": -1, "filename": "PageCalc-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ffdbd3b35461a46858d7ecfb71097d3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5844, "upload_time": "2015-06-09T18:45:30", "url": "https://files.pythonhosted.org/packages/07/0d/56ae6fae1a755efb10844acc57ac4ca2d007b7a10f1091587e6bde09f821/PageCalc-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ffdbd3b35461a46858d7ecfb71097d3b", "sha256": "82b09f8841431fbb062950720a6ded36987ba58d36ec6b1a0d0b7fb6e587837d" }, "downloads": -1, "filename": "PageCalc-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ffdbd3b35461a46858d7ecfb71097d3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5844, "upload_time": "2015-06-09T18:45:30", "url": "https://files.pythonhosted.org/packages/07/0d/56ae6fae1a755efb10844acc57ac4ca2d007b7a10f1091587e6bde09f821/PageCalc-0.2.3.tar.gz" } ] }