X-Git-Url: https://git.mdrn.pl/django-pagination.git/blobdiff_plain/d6dc739e87296de75a9a644834e050c13875a894..d328dc6fe3c27a70dfdbf003227edbf1d7cce40c:/pagination/templatetags/pagination_tags.py diff --git a/pagination/templatetags/pagination_tags.py b/pagination/templatetags/pagination_tags.py index 66d8640..499db41 100644 --- a/pagination/templatetags/pagination_tags.py +++ b/pagination/templatetags/pagination_tags.py @@ -8,8 +8,9 @@ from django.core.paginator import Paginator, QuerySetPaginator, InvalidPage register = template.Library() -DEFAULT_PAGINATION = 20 -DEFAULT_WINDOW = 4 +DEFAULT_PAGINATION = getattr(settings, 'PAGINATION_DEFAULT_PAGINATION', 20) +DEFAULT_WINDOW = getattr(settings, 'PAGINATION_DEFAULT_WINDOW', 4) +DEFAULT_ORPHANS = getattr(settings, 'PAGINATION_DEFAULT_ORPHANS', 0) def do_autopaginate(parser, token): """ @@ -24,6 +25,16 @@ def do_autopaginate(parser, token): except ValueError: raise template.TemplateSyntaxError(u'Got %s, but expected integer.' % split[2]) return AutoPaginateNode(split[1], paginate_by=paginate_by) + elif len(split) == 4: + try: + paginate_by = int(split[2]) + except ValueError: + raise template.TemplateSyntaxError(u'Got %s, but expected integer.' % split[2]) + try: + orphans = int(split[3]) + except ValueError: + raise template.TemplateSyntaxError(u'Got %s, but expected integer.' % split[3]) + return AutoPaginateNode(split[1], paginate_by=paginate_by, orphans=orphans) else: raise template.TemplateSyntaxError('%r tag takes one required argument and one optional argument' % split[0]) @@ -51,9 +62,10 @@ class AutoPaginateNode(template.Node): tag. If you choose not to use *{% paginate %}*, make sure to display the list of availabale pages, or else the application may seem to be buggy. """ - def __init__(self, queryset_var, paginate_by=DEFAULT_PAGINATION): + def __init__(self, queryset_var, paginate_by=DEFAULT_PAGINATION, orphans=DEFAULT_ORPHANS): self.queryset_var = template.Variable(queryset_var) self.paginate_by = paginate_by + self.orphans = orphans def render(self, context): key = self.queryset_var.var @@ -68,10 +80,12 @@ class AutoPaginateNode(template.Node): except IndexError: return u'' paginator_class = Paginator - paginator = paginator_class(value, self.paginate_by) + paginator = paginator_class(value, self.paginate_by, self.orphans) try: page_obj = paginator.page(context['request'].page) - except: + except InvalidPage: + context[key] = [] + context['invalid_page'] = True return u'' context[key] = page_obj.object_list context['paginator'] = paginator @@ -183,4 +197,4 @@ def paginate(context, window=DEFAULT_WINDOW): except KeyError: return {} register.inclusion_tag('pagination/pagination.html', takes_context=True)(paginate) -register.tag('autopaginate', do_autopaginate) \ No newline at end of file +register.tag('autopaginate', do_autopaginate)