diff --git a/django/views/generic/list_detail.py b/django/views/generic/list_detail.py index 5bd5b87d33..bd0f17c56a 100644 --- a/django/views/generic/list_detail.py +++ b/django/views/generic/list_detail.py @@ -4,8 +4,8 @@ from django.core.xheaders import populate_xheaders from django.core.paginator import ObjectPaginator, InvalidPage from django.core.exceptions import ObjectDoesNotExist -def object_list(request, queryset, paginate_by=None, allow_empty=False, - template_name=None, template_loader=loader, +def object_list(request, queryset, paginate_by=None, page=None, + allow_empty=False, template_name=None, template_loader=loader, extra_context=None, context_processors=None, template_object_name='object', mimetype=None): """ @@ -38,7 +38,8 @@ def object_list(request, queryset, paginate_by=None, allow_empty=False, queryset = queryset._clone() if paginate_by: paginator = ObjectPaginator(queryset, paginate_by) - page = request.GET.get('page', 1) + if not page: + page = request.GET.get('page', 1) try: page = int(page) object_list = paginator.get_page(page - 1) diff --git a/docs/generic_views.txt b/docs/generic_views.txt index 317828a2b2..d14fe12418 100644 --- a/docs/generic_views.txt +++ b/docs/generic_views.txt @@ -641,8 +641,10 @@ A page representing a list of objects. * ``paginate_by``: An integer specifying how many objects should be displayed per page. If this is given, the view will paginate objects with - ``paginate_by`` objects per page. The view will expect a ``page`` query - string (GET) parameter containing a zero-indexed page number. + ``paginate_by`` objects per page. The view will expect either a ``page`` + query string parameter (via ``GET``) containing a zero-indexed page + number, or a ``page`` variable specified in the URLconf. See + "Notes on pagination" below. * ``template_name``: The full name of a template to use in rendering the page. This lets you override the default template name (see below). @@ -711,6 +713,25 @@ If the results are paginated, the context will contain these extra variables: * ``hits``: The total number of objects across *all* pages, not just this page. +Notes on pagination +~~~~~~~~~~~~~~~~~~~ + +If ``paginate_by`` is specified, Django will paginate the results. You can +specify the page number in the URL in one of two ways: + + * Use the ``page`` parameter in the URLconf. For example, this is what + your URLconf might look like:: + + (r'^objects/page(?P[0-9]+)/$', 'object_list', dict(info_dict)) + + * Pass the page number via the ``page`` query-string parameter. For + example, a URL would look like this: + + /objects/?page=3 + +In both cases, ``page`` is 1-based, not 0-based, so the first page would be +represented as page ``1``. + ``django.views.generic.list_detail.object_detail`` --------------------------------------------------