From 5eda0f3b150054e616c1e15db7ddf1883b0f5198 Mon Sep 17 00:00:00 2001 From: floguy Date: Thu, 29 May 2008 03:08:14 +0000 Subject: [PATCH] Fleshed out initial version of the paginate templatetag. git-svn-id: https://django-pagination.googlecode.com/svn/trunk@4 7f1efe38-554e-0410-b69d-834cb44da2d5 --- .../templates/pagination/pagination.html | 24 ++++++++++++- pagination/templatetags/pagination_tags.py | 34 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/pagination/templates/pagination/pagination.html b/pagination/templates/pagination/pagination.html index 8b13789..ac7ad68 100644 --- a/pagination/templates/pagination/pagination.html +++ b/pagination/templates/pagination/pagination.html @@ -1 +1,23 @@ - + \ No newline at end of file diff --git a/pagination/templatetags/pagination_tags.py b/pagination/templatetags/pagination_tags.py index 8b13789..0bd9805 100644 --- a/pagination/templatetags/pagination_tags.py +++ b/pagination/templatetags/pagination_tags.py @@ -1 +1,35 @@ +try: + set +except NameError: + from sets import Set as set +def paginate(context, window=4): + paginator = context['paginator'] + page_obj = context['page_obj'] + page_range = paginator.page_range + first = set(page_range[:window]) + last_start = len(page_range)-window + if last_start < 0: + last_start = 0 + last = set(page_range[last_start:]) + current_start = page_obj.number-1-window + if current_start < 0: + current_start = 0 + current = set(page_range[current_start:page_obj.number-1+window]) + pages = [] + if len(first.intersection(current)) == 0: + pages.extend(list(first)) + pages.append(None) + pages.extend(list(current)) + else: + pages.extend(first.union(current)) + if len(current.intersection(last)) == 0: + pages.append(None) + pages.extend(list(last)) + else: + pages.extend(list(last.difference(current))) + return { + 'pages': pages, + 'page_obj': page_obj, + 'paginator': paginator, + } \ No newline at end of file -- 2.20.1