fnp
/
django-pagination.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix window exceeding page range
[django-pagination.git]
/
linaro_django_pagination
/
templatetags
/
pagination_tags.py
diff --git
a/linaro_django_pagination/templatetags/pagination_tags.py
b/linaro_django_pagination/templatetags/pagination_tags.py
index
28e2897
..
f106942
100644
(file)
--- a/
linaro_django_pagination/templatetags/pagination_tags.py
+++ b/
linaro_django_pagination/templatetags/pagination_tags.py
@@
-37,11
+37,16
@@
from django.template import (
Context,
Library,
Node,
Context,
Library,
Node,
- TOKEN_BLOCK,
TemplateSyntaxError,
Variable,
loader,
)
TemplateSyntaxError,
Variable,
loader,
)
+
+try:
+ from django.template.base import TOKEN_BLOCK
+except ImportError: # Django < 1.8
+ from django.template import TOKEN_BLOCK
+
from django.template.loader import select_template
from django.utils.text import unescape_string_literal
from django.template.loader import select_template
from django.utils.text import unescape_string_literal
@@
-60,7
+65,7
@@
def do_autopaginate(parser, token):
# Check whether there are any other autopaginations are later in this template
expr = lambda obj: (obj.token_type == TOKEN_BLOCK and \
len(obj.split_contents()) > 0 and obj.split_contents()[0] == "autopaginate")
# Check whether there are any other autopaginations are later in this template
expr = lambda obj: (obj.token_type == TOKEN_BLOCK and \
len(obj.split_contents()) > 0 and obj.split_contents()[0] == "autopaginate")
- multiple_paginations = len(
filter(expr, parser.tokens)
) > 0
+ multiple_paginations = len(
[tok for tok in parser.tokens if expr(tok)]
) > 0
i = iter(token.split_contents())
paginate_by = None
i = iter(token.split_contents())
paginate_by = None
@@
-69,26
+74,26
@@
def do_autopaginate(parser, token):
orphans = None
word = None
try:
orphans = None
word = None
try:
- word =
i.next(
)
+ word =
next(i
)
assert word == "autopaginate"
assert word == "autopaginate"
- queryset_var =
i.next(
)
- word =
i.next(
)
+ queryset_var =
next(i
)
+ word =
next(i
)
if word != "as":
paginate_by = word
try:
paginate_by = int(paginate_by)
except ValueError:
pass
if word != "as":
paginate_by = word
try:
paginate_by = int(paginate_by)
except ValueError:
pass
- word =
i.next(
)
+ word =
next(i
)
if word != "as":
orphans = word
try:
orphans = int(orphans)
except ValueError:
pass
if word != "as":
orphans = word
try:
orphans = int(orphans)
except ValueError:
pass
- word =
i.next(
)
+ word =
next(i
)
assert word == "as"
assert word == "as"
- context_var =
i.next(
)
+ context_var =
next(i
)
except StopIteration:
pass
if queryset_var is None:
except StopIteration:
pass
if queryset_var is None:
@@
-135,7
+140,11
@@
class AutoPaginateNode(Node):
self.multiple_paginations = multiple_paginations
def render(self, context):
self.multiple_paginations = multiple_paginations
def render(self, context):
- if self.multiple_paginations or getattr(context, "paginator", None):
+ # Save multiple_paginations state in context
+ if self.multiple_paginations and 'multiple_paginations' not in context:
+ context['multiple_paginations'] = True
+
+ if context.get('multiple_paginations') or getattr(context, "paginator", None):
page_suffix = '_%s' % self.queryset_var
else:
page_suffix = ''
page_suffix = '_%s' % self.queryset_var
else:
page_suffix = ''
@@
-165,7
+174,7
@@
class AutoPaginateNode(Node):
'False, an HTTP 404 page would have been shown instead.')
context[key] = []
context['invalid_page'] = True
'False, an HTTP 404 page would have been shown instead.')
context[key] = []
context['invalid_page'] = True
- return
u
''
+ return ''
if self.context_var is not None:
context[self.context_var] = page_obj.object_list
else:
if self.context_var is not None:
context[self.context_var] = page_obj.object_list
else:
@@
-173,7
+182,7
@@
class AutoPaginateNode(Node):
context['paginator'] = paginator
context['page_obj'] = page_obj
context['page_suffix'] = page_suffix
context['paginator'] = paginator
context['page_obj'] = page_obj
context['page_suffix'] = page_suffix
- return
u
''
+ return ''
class PaginateNode(Node):
class PaginateNode(Node):
@@
-183,10
+192,10
@@
class PaginateNode(Node):
def render(self, context):
template_list = ['pagination/pagination.html']
def render(self, context):
template_list = ['pagination/pagination.html']
-
to_return
= paginate(context)
+
new_context
= paginate(context)
if self.template:
template_list.insert(0, self.template)
if self.template:
template_list.insert(0, self.template)
- return loader.render_to_string(template_list,
to_return,
+ return loader.render_to_string(template_list,
new_context,
context_instance = context)
context_instance = context)
@@
-259,7
+268,7
@@
def paginate(context, window=DEFAULT_WINDOW, margin=DEFAULT_MARGIN):
paginator = context['paginator']
page_obj = context['page_obj']
page_suffix = context.get('page_suffix', '')
paginator = context['paginator']
page_obj = context['page_obj']
page_suffix = context.get('page_suffix', '')
- page_range =
paginator.page_range
+ page_range =
list(paginator.page_range)
# Calculate the record range in the current page for display.
records = {'first': 1 + (page_obj.number - 1) * paginator.per_page}
records['last'] = records['first'] + paginator.per_page - 1
# Calculate the record range in the current page for display.
records = {'first': 1 + (page_obj.number - 1) * paginator.per_page}
records['last'] = records['first'] + paginator.per_page - 1
@@
-275,7
+284,7
@@
def paginate(context, window=DEFAULT_WINDOW, margin=DEFAULT_MARGIN):
window_end = window_end - window_start
window_start = 0
if window_end > paginator.num_pages:
window_end = window_end - window_start
window_start = 0
if window_end > paginator.num_pages:
- window_start =
window_start - (window_end - paginator.num_pages
)
+ window_start =
max(0, window_start - (window_end - paginator.num_pages)
)
window_end = paginator.num_pages
pages = page_range[window_start:window_end]
window_end = paginator.num_pages
pages = page_range[window_start:window_end]
@@
-303,9
+312,10
@@
def paginate(context, window=DEFAULT_WINDOW, margin=DEFAULT_MARGIN):
if pages[-1] != paginator.num_pages:
pages.append(None)
if pages[-1] != paginator.num_pages:
pages.append(None)
-
to_return
= {
+
new_context
= {
'MEDIA_URL': settings.MEDIA_URL,
'STATIC_URL': getattr(settings, "STATIC_URL", None),
'MEDIA_URL': settings.MEDIA_URL,
'STATIC_URL': getattr(settings, "STATIC_URL", None),
+ 'disable_link_for_first_page': DISABLE_LINK_FOR_FIRST_PAGE,
'display_disabled_next_link': DISPLAY_DISABLED_NEXT_LINK,
'display_disabled_previous_link': DISPLAY_DISABLED_PREVIOUS_LINK,
'display_page_links': DISPLAY_PAGE_LINKS,
'display_disabled_next_link': DISPLAY_DISABLED_NEXT_LINK,
'display_disabled_previous_link': DISPLAY_DISABLED_PREVIOUS_LINK,
'display_page_links': DISPLAY_PAGE_LINKS,
@@
-323,10
+333,10
@@
def paginate(context, window=DEFAULT_WINDOW, margin=DEFAULT_MARGIN):
if 'page%s' % page_suffix in getvars:
del getvars['page%s' % page_suffix]
if len(getvars.keys()) > 0:
if 'page%s' % page_suffix in getvars:
del getvars['page%s' % page_suffix]
if len(getvars.keys()) > 0:
-
to_return
['getvars'] = "&%s" % getvars.urlencode()
+
new_context
['getvars'] = "&%s" % getvars.urlencode()
else:
else:
-
to_return
['getvars'] = ''
- return
to_return
+
new_context
['getvars'] = ''
+ return
new_context
except (KeyError, AttributeError):
return {}
except (KeyError, AttributeError):
return {}