Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
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))
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
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))