summaryrefslogtreecommitdiff
path: root/postgresqleu/util/pagination.py
blob: 47a5e3a6819c684af8428bdfcfba5687dc17cc79 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)