mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #1795 -- Added page_range to paginators in generic list views. Thanks to polarcowz@gmail.com and Marc Fargas <telenieko@telenieko.com> for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6146 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -20,6 +20,7 @@ class ObjectPaginator(object): | ||||
|         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 @@ class ObjectPaginator(object): | ||||
|                 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) | ||||
|   | ||||
| @@ -39,6 +39,8 @@ def object_list(request, queryset, paginate_by=None, page=None, | ||||
|         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 @@ def object_list(request, queryset, paginate_by=None, page=None, | ||||
|             '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, { | ||||
|   | ||||
| @@ -765,6 +765,9 @@ 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. | ||||
|  | ||||
|     * ``page_range``: A list of the page numbers that are available. This | ||||
|       is 1-based. | ||||
|  | ||||
| Notes on pagination | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -781,7 +784,11 @@ specify the page number in the URL in one of two ways: | ||||
|  | ||||
|         /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`` | ||||
|   | ||||
| @@ -77,4 +77,8 @@ True | ||||
| >>> 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] | ||||
| """} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user