Author: russellm
Date: 2007-09-13 20:01:02 -0500 (Thu, 13 Sep 2007)
New Revision: 6146
Modified:
django/trunk/django/core/paginator.py
django/trunk/django/views/generic/list_detail.py
django/trunk/docs/generic_views.txt
django/trunk/tests/modeltests/pagination/models.py
Log:
Fixed #1795 -- Added page_range to paginators in generic list views. Thanks to
[EMAIL PROTECTED] and Marc Fargas <[EMAIL PROTECTED]> for the patch.
Modified: django/trunk/django/core/paginator.py
===================================================================
--- django/trunk/django/core/paginator.py 2007-09-14 00:58:57 UTC (rev
6145)
+++ django/trunk/django/core/paginator.py 2007-09-14 01:01:02 UTC (rev
6146)
@@ -20,6 +20,7 @@
self.num_per_page = num_per_page
self.orphans = orphans
self._hits = self._pages = None
+ self._page_range = None
def validate_page_number(self, page_number):
try:
@@ -83,6 +84,16 @@
hits = 0
self._pages = hits // self.num_per_page + 1
return self._pages
+
+ def _get_page_range(self):
+ """
+ Returns a 1-based range of pages for iterating through within
+ a template for loop.
+ """
+ if self._page_range is None:
+ self._page_range = range(1, self._pages + 1)
+ return self._page_range
hits = property(_get_hits)
pages = property(_get_pages)
+ page_range = property(_get_page_range)
Modified: django/trunk/django/views/generic/list_detail.py
===================================================================
--- django/trunk/django/views/generic/list_detail.py 2007-09-14 00:58:57 UTC
(rev 6145)
+++ django/trunk/django/views/generic/list_detail.py 2007-09-14 01:01:02 UTC
(rev 6146)
@@ -39,6 +39,8 @@
first_on_page
the result number of the first object in the
object_list (1-indexed)
+ page_range:
+ A list of the page numbers (1-indexed).
"""
if extra_context is None: extra_context = {}
queryset = queryset._clone()
@@ -67,6 +69,7 @@
'first_on_page': paginator.first_on_page(page - 1),
'pages': paginator.pages,
'hits' : paginator.hits,
+ 'page_range' : paginator.page_range
}, context_processors)
else:
c = RequestContext(request, {
Modified: django/trunk/docs/generic_views.txt
===================================================================
--- django/trunk/docs/generic_views.txt 2007-09-14 00:58:57 UTC (rev 6145)
+++ django/trunk/docs/generic_views.txt 2007-09-14 01:01:02 UTC (rev 6146)
@@ -765,6 +765,9 @@
* ``hits``: The total number of objects across *all* pages, not just this
page.
+ * ``page_range``: A list of the page numbers that are available. This
+ is 1-based.
+
Notes on pagination
~~~~~~~~~~~~~~~~~~~
@@ -781,7 +784,11 @@
/objects/?page=3
-In both cases, ``page`` is 1-based, not 0-based, so the first page would be
+ * To loop over all the available page numbers, use the ``page_range``
+ variable. You can iterate over the list provided by ``page_range``
+ to create a link to every page of results.
+
+These values and lists are is 1-based, not 0-based, so the first page would be
represented as page ``1``.
``django.views.generic.list_detail.object_detail``
Modified: django/trunk/tests/modeltests/pagination/models.py
===================================================================
--- django/trunk/tests/modeltests/pagination/models.py 2007-09-14 00:58:57 UTC
(rev 6145)
+++ django/trunk/tests/modeltests/pagination/models.py 2007-09-14 01:01:02 UTC
(rev 6146)
@@ -77,4 +77,8 @@
>>> paginator = ObjectPaginator(Article.objects.all(), 10, orphans=1)
>>> paginator.pages
2
+
+# The paginator can provide a list of all available pages
+>>> paginator.page_range
+[1, 2]
"""}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---