X-Git-Url: https://git.mdrn.pl/django-pagination.git/blobdiff_plain/598ff7844c5acbf477bbf28d63044730bc813640..d328dc6fe3c27a70dfdbf003227edbf1d7cce40c:/pagination/templatetags/pagination_tags.py diff --git a/pagination/templatetags/pagination_tags.py b/pagination/templatetags/pagination_tags.py index 8a88815..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 @@ -175,9 +189,12 @@ def paginate(context, window=DEFAULT_WINDOW): getvars = context['request'].GET.copy() if 'page' in getvars: del getvars['page'] - to_return['getvars'] = "&%s" % getvars.urlencode() + if len(getvars.keys()) > 0: + to_return['getvars'] = "&%s" % getvars.urlencode() + else: + to_return['getvars'] = '' return to_return 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)