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))
class ResponsePaginator(object): """ Uses DiggPaginator from http://bitbucket.org/miracle2k/djutils/src/tip/djutils/pagination.py. We could reconsider writing our own code. """ def __init__(self, queryset, vars=None, template=None, page_size=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, page_size, body=7, padding=2, tail=1) def paginate(self, request): page_num = 1 redirect = None if ('page' in request.GET): try: page_num = int(request.GET['page']) if page_num > self.p.num_pages: redirect = self.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 = self.p.page(page_num) self.vars['items'] = page.object_list self.vars['paginator'] = self.p self.vars['page'] = page self.vars['page_number'] = page_num if self.callback_key is not None: self.vars[self.callback_key] = self.callback(page) if self.view: return self.view() return render_to_response(self.template, self.vars, context_instance=RequestContext(request))
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=5, padding=2) 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))
class ResponsePaginator(object): """ Uses DiggPaginator from http://bitbucket.org/miracle2k/djutils/src/tip/djutils/pagination.py. We could reconsider writing our own code. """ 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(self, request): page_num = 1 self.vars['pagination_type'] = 'num' redirect = None if ('page' in request.GET): try: page_num = int(request.GET['page']) if page_num > self.p.num_pages: redirect = self.p.num_pages elif page_num < 1: redirect = 1 except ValueError: if 'alpha_paginator' in self.vars and \ request.GET['page'][:2] == 'a_': self.alpha_paginator = self.vars['alpha_paginator'] try: alpha_page_num = int(request.GET['page'][2:]) if alpha_page_num > self.alpha_paginator.num_pages: redirect = 'a_%d' % self.alpha_paginator.num_pages elif page_num < 1: redirect = 'a_1' else: alpha_page = \ self.alpha_paginator.page(alpha_page_num) self.vars['pagination_type'] = 'alpha' self.vars['alpha_page'] = alpha_page issue_count = self.alpha_paginator.number_offset for i in range(1, alpha_page_num): issue_count += \ self.alpha_paginator.page(i).count page_num = int(issue_count / self.p.per_page) + 1 except ValueError: redirect = 1 else: 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 = self.p.page(page_num) self.vars['items'] = page.object_list self.vars['paginator'] = self.p self.vars['page'] = page self.vars['page_number'] = page_num if self.callback_key is not None: self.vars[self.callback_key] = self.callback(page) if self.view: return self.view() return render_to_response(self.template, self.vars, context_instance=RequestContext(request))