diff options
Diffstat (limited to 'postgresqleu/util/pagination.py')
-rw-r--r-- | postgresqleu/util/pagination.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/postgresqleu/util/pagination.py b/postgresqleu/util/pagination.py new file mode 100644 index 00000000..47a5e3a6 --- /dev/null +++ b/postgresqleu/util/pagination.py @@ -0,0 +1,27 @@ +from django.core.paginator import Paginator, EmptyPage, InvalidPage + + +def simple_pagination(request, objects, num_per_page): + paginator = Paginator(objects, num_per_page) + try: + page = int(request.GET.get('page', '1')) + except ValueError: + page = 1 + + try: + queryset = paginator.page(page) + except (EmptyPage, InvalidPage): + queryset = paginator.page(paginator.num_pages) + + if paginator.num_pages > 15: + if page < paginator.num_pages - 13: + firstpage = max(1, page - 7) + lastpage = firstpage + 15 + else: + lastpage = min(paginator.num_pages + 1, page + 8) + firstpage = lastpage - 15 + page_range = list(range(firstpage, lastpage)) + else: + page_range = paginator.page_range + + return (queryset, paginator, page_range) |