0bd98059f60a61bdd44a8750777b1b66c63bd346
[django-pagination.git] / pagination / templatetags / pagination_tags.py
1 try:
2     set
3 except NameError:
4     from sets import Set as set
5
6 def paginate(context, window=4):
7     paginator = context['paginator']
8     page_obj = context['page_obj']
9     page_range = paginator.page_range
10     first = set(page_range[:window])
11     last_start = len(page_range)-window
12     if last_start < 0:
13         last_start = 0
14     last = set(page_range[last_start:])
15     current_start = page_obj.number-1-window
16     if current_start < 0:
17         current_start = 0
18     current = set(page_range[current_start:page_obj.number-1+window])
19     pages = []
20     if len(first.intersection(current)) == 0:
21         pages.extend(list(first))
22         pages.append(None)
23         pages.extend(list(current))
24     else:
25         pages.extend(first.union(current))
26     if len(current.intersection(last)) == 0:
27         pages.append(None)
28         pages.extend(list(last))
29     else:
30         pages.extend(list(last.difference(current)))
31     return { 
32         'pages': pages,
33         'page_obj': page_obj,
34         'paginator': paginator,
35     }