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
-~----------~----~----~----~------~----~------~--~---

Reply via email to