diff options
author | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2014-11-19 02:38:09 +0100 |
---|---|---|
committer | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2014-11-19 02:48:45 +0100 |
commit | dacfc5fe13dc6b46fa90e5ef9fb07509afd5d777 (patch) | |
tree | 105012c6c041d9bc98045846dd82c6ab262875cd /pagination.py | |
parent | 2d04a1bd8efe3c440ecf66a22b3ae138ed8eaabe (diff) | |
download | padlite-teams-dacfc5fe13dc6b46fa90e5ef9fb07509afd5d777.tar.gz padlite-teams-dacfc5fe13dc6b46fa90e5ef9fb07509afd5d777.tar.bz2 padlite-teams-dacfc5fe13dc6b46fa90e5ef9fb07509afd5d777.zip |
templates/all: add paginated list of all browsable groups
Diffstat (limited to 'pagination.py')
-rw-r--r-- | pagination.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/pagination.py b/pagination.py new file mode 100644 index 0000000..58fb869 --- /dev/null +++ b/pagination.py @@ -0,0 +1,40 @@ +from math import ceil +from app import app +from flask import url_for, request + +class Pagination(object): + def __init__(self, page, per_page, total_count): + self.page = page + self.per_page = per_page + self.total_count = total_count + + @property + def pages(self): + return int(ceil(self.total_count / float(self.per_page))) + + @property + def has_prev(self): + return self.page > 1 + + @property + def has_next(self): + return self.page < self.pages + + def iter_pages(self, left_edge=2, left_current=2, + right_current=5, right_edge=2): + last = 0 + for num in xrange(1, self.pages + 1): + if num <= left_edge or \ + (num > self.page - left_current - 1 and \ + num < self.page + right_current) or \ + num > self.pages - right_edge: + if last + 1 != num: + yield None + yield num + last = num + +def url_for_other_page(page): + args = request.view_args.copy() + args['page'] = page + return url_for(request.endpoint, **args) +app.jinja_env.globals['url_for_other_page'] = url_for_other_page |