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):
"""
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])
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
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
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)