From: Michele Ciccozzi Date: Mon, 6 Jun 2011 13:06:45 +0000 (+0200) Subject: Merge branch 'more_customizations' X-Git-Tag: release-2.0~32^2 X-Git-Url: https://git.mdrn.pl/django-pagination.git/commitdiff_plain/b10406063c839f4ad856a1130c66706f004fa358?ds=inline;hp=-c Merge branch 'more_customizations' Conflicts: pagination/templates/pagination/pagination.html pagination/templatetags/pagination_tags.py --- b10406063c839f4ad856a1130c66706f004fa358 diff --combined pagination/templates/pagination/default.html index 0000000,794765b..2fe8410 mode 000000,100644..100644 --- a/pagination/templates/pagination/default.html +++ b/pagination/templates/pagination/default.html @@@ -1,0 -1,38 +1,38 @@@ + {% if is_paginated %} + {% load i18n %} + -{% endif %} ++{% endif %} diff --combined pagination/templatetags/pagination_tags.py index 3273538,fe4bd07..2ad1403 mode 100644,100755..100755 --- a/pagination/templatetags/pagination_tags.py +++ b/pagination/templatetags/pagination_tags.py @@@ -4,7 -4,6 +4,7 @@@ except NameError from sets import Set as set from django import template +from django.template import TOKEN_BLOCK from django.http import Http404 from django.core.paginator import Paginator, InvalidPage from django.conf import settings @@@ -16,17 -15,16 +16,22 @@@ DEFAULT_WINDOW = getattr(settings, 'PAG DEFAULT_ORPHANS = getattr(settings, 'PAGINATION_DEFAULT_ORPHANS', 0) INVALID_PAGE_RAISES_404 = getattr(settings, 'PAGINATION_INVALID_PAGE_RAISES_404', False) + DISPLAY_PAGE_LINKS = getattr(settings, 'PAGINATION_DISPLAY_PAGE_LINKS', True) + PREVIOUS_LINK_DECORATOR = getattr(settings, 'PAGINATION_PREVIOUS_LINK_DECORATOR', "‹‹ ") + NEXT_LINK_DECORATOR = getattr(settings, 'PAGINATION_NEXT_LINK_DECORATOR', " ››") -DISPLAY_DISABLED_PREVIOUS_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_PREVIOUS_LINK', True) -DISPLAY_DISABLED_NEXT_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_NEXT_LINK', True) ++DISPLAY_DISABLED_PREVIOUS_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_PREVIOUS_LINK', False) ++DISPLAY_DISABLED_NEXT_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_NEXT_LINK', False) def do_autopaginate(parser, token): """ Splits the arguments to the autopaginate tag and formats them correctly. """ + + # 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 + split = token.split_contents() as_index = None context_var = None @@@ -43,10 -41,10 +48,10 @@@ "context_var_name %%}" % split[0]) del split[as_index:as_index + 2] if len(split) == 2: - return AutoPaginateNode(split[1]) + return AutoPaginateNode(split[1], multiple_paginations=multiple_paginations) elif len(split) == 3: return AutoPaginateNode(split[1], paginate_by=split[2], - context_var=context_var) + context_var=context_var, multiple_paginations=multiple_paginations) elif len(split) == 4: try: orphans = int(split[3]) @@@ -54,7 -52,7 +59,7 @@@ raise template.TemplateSyntaxError(u'Got %s, but expected integer.' % split[3]) return AutoPaginateNode(split[1], paginate_by=split[2], orphans=orphans, - context_var=context_var) + context_var=context_var, multiple_paginations=multiple_paginations) else: raise template.TemplateSyntaxError('%r tag takes one required ' + 'argument and one optional argument' % split[0]) @@@ -76,7 -74,7 +81,7 @@@ class AutoPaginateNode(template.Node) tag. If you choose not to use *{% paginate %}*, make sure to display the list of available pages, or else the application may seem to be buggy. """ - def __init__(self, queryset_var, paginate_by=DEFAULT_PAGINATION, + def __init__(self, queryset_var, multiple_paginations, paginate_by=DEFAULT_PAGINATION, orphans=DEFAULT_ORPHANS, context_var=None): self.queryset_var = template.Variable(queryset_var) if isinstance(paginate_by, int): @@@ -85,14 -83,8 +90,14 @@@ self.paginate_by = template.Variable(paginate_by) self.orphans = orphans self.context_var = context_var + self.multiple_paginations = multiple_paginations def render(self, context): + if self.multiple_paginations or context.has_key('paginator'): + page_suffix = '_%s' % self.queryset_var + else: + page_suffix = '' + key = self.queryset_var.var value = self.queryset_var.resolve(context) if isinstance(self.paginate_by, int): @@@ -101,7 -93,7 +106,7 @@@ paginate_by = self.paginate_by.resolve(context) paginator = Paginator(value, paginate_by, self.orphans) try: - page_obj = paginator.page(context['request'].page) + page_obj = paginator.page(context['request'].page(page_suffix)) except InvalidPage: if INVALID_PAGE_RAISES_404: raise Http404('Invalid page requested. If DEBUG were set to ' + @@@ -115,7 -107,6 +120,7 @@@ context[key] = page_obj.object_list context['paginator'] = paginator context['page_obj'] = page_obj + context['page_suffix'] = page_suffix return u'' @@@ -143,12 -134,17 +148,18 @@@ def paginate(context, window=DEFAULT_WI A dictionary of all of the **GET** parameters in the current request. This is useful to maintain certain types of state, even when requesting a different page. - """ + + ``pagination_template`` + A custom template to include in place of the default ``pagination.html`` + contents. + + """ try: paginator = context['paginator'] page_obj = context['page_obj'] + page_suffix = context.get('page_suffix', '') page_range = paginator.page_range + pagination_template = context.get('pagination_template', 'pagination/default.html') # 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 @@@ -227,12 -223,17 +238,18 @@@ 'paginator': paginator, 'hashtag': hashtag, 'is_paginated': paginator.count > paginator.per_page, + 'page_suffix': page_suffix, + 'display_page_links': DISPLAY_PAGE_LINKS, + 'display_disabled_previous_link': DISPLAY_DISABLED_PREVIOUS_LINK, + 'display_disabled_next_link': DISPLAY_DISABLED_NEXT_LINK, + 'previous_link_decorator': PREVIOUS_LINK_DECORATOR, + 'next_link_decorator': NEXT_LINK_DECORATOR, + 'pagination_template': pagination_template, } if 'request' in context: getvars = context['request'].GET.copy() - if 'page' in getvars: - del getvars['page'] + if 'page%s' % page_suffix in getvars: + del getvars['page%s' % page_suffix] if len(getvars.keys()) > 0: to_return['getvars'] = "&%s" % getvars.urlencode() else: