Fixed #2075 -- Added 'page' parameter to object_list generic view. Thanks, kanashii@kanashii.ca

git-svn-id: http://code.djangoproject.com/svn/django/trunk@3071 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2006-06-03 22:06:48 +00:00
parent 9b86db9bf2
commit fc2a02f966
2 changed files with 27 additions and 5 deletions

View File

@ -4,8 +4,8 @@ from django.core.xheaders import populate_xheaders
from django.core.paginator import ObjectPaginator, InvalidPage from django.core.paginator import ObjectPaginator, InvalidPage
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
def object_list(request, queryset, paginate_by=None, allow_empty=False, def object_list(request, queryset, paginate_by=None, page=None,
template_name=None, template_loader=loader, allow_empty=False, template_name=None, template_loader=loader,
extra_context=None, context_processors=None, template_object_name='object', extra_context=None, context_processors=None, template_object_name='object',
mimetype=None): mimetype=None):
""" """
@ -38,7 +38,8 @@ def object_list(request, queryset, paginate_by=None, allow_empty=False,
queryset = queryset._clone() queryset = queryset._clone()
if paginate_by: if paginate_by:
paginator = ObjectPaginator(queryset, paginate_by) paginator = ObjectPaginator(queryset, paginate_by)
page = request.GET.get('page', 1) if not page:
page = request.GET.get('page', 1)
try: try:
page = int(page) page = int(page)
object_list = paginator.get_page(page - 1) object_list = paginator.get_page(page - 1)

View File

@ -641,8 +641,10 @@ A page representing a list of objects.
* ``paginate_by``: An integer specifying how many objects should be * ``paginate_by``: An integer specifying how many objects should be
displayed per page. If this is given, the view will paginate objects with 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 ``paginate_by`` objects per page. The view will expect either a ``page``
string (GET) parameter containing a zero-indexed page number. 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 * ``template_name``: The full name of a template to use in rendering the
page. This lets you override the default template name (see below). 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 * ``hits``: The total number of objects across *all* pages, not just this
page. 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<page>[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`` ``django.views.generic.list_detail.object_detail``
-------------------------------------------------- --------------------------------------------------