4 from sets import Set as set
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
14 last = set(page_range[last_start:])
15 current_start = page_obj.number-1-window
18 current = set(page_range[current_start:page_obj.number-1+window])
20 if len(first.intersection(current)) == 0:
21 pages.extend(list(first))
23 pages.extend(list(current))
25 pages.extend(first.union(current))
26 if len(current.intersection(last)) == 0:
28 pages.extend(list(last))
30 pages.extend(list(last.difference(current)))
34 'paginator': paginator,