def __init__(self, queryset, vars=None, template=None, per_page=100, callback_key=None, callback=None, view=None): """ Either template or view should be set """ if template is None and view is None: raise ValueError self.template = template self.vars = vars and vars or {} self.callback_key = callback_key self.callback = callback self.view = view self.p = DiggPaginator(queryset, per_page, body=7, padding=2, tail=1)
def paginate_response(request, queryset, template, vars, page_size=100, callback_key=None, callback=None): """ Uses DiggPaginator from http://bitbucket.org/miracle2k/djutils/src/tip/djutils/pagination.py. We could reconsider writing our own code. """ p = DiggPaginator(queryset, page_size, body=7, padding=2, tail=1) page_num = 1 redirect = None if ('page' in request.GET): try: page_num = int(request.GET['page']) if page_num > p.num_pages: redirect = p.num_pages elif page_num < 1: redirect = 1 except ValueError: redirect = 1 if redirect is not None: args = request.GET.copy() args['page'] = redirect return HttpResponseRedirect( quote(request.path.encode('UTF-8')) + u'?' + args.urlencode()) page = p.page(page_num) vars['items'] = page.object_list vars['paginator'] = p vars['page'] = page vars['page_number'] = page_num if callback_key is not None: vars[callback_key] = callback(page) return render_to_response(template, vars, context_instance=RequestContext(request))