コード例 #1
0
ファイル: __init__.py プロジェクト: matty-digital/gcd-django
 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)
コード例 #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))