Django

Code

Changeset 6146

Show
Ignore:
Timestamp:
09/13/07 20:01:02 (1 year ago)
Author:
russellm
Message:

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.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/core/paginator.py

    r4041 r6146  
    2121        self.orphans = orphans 
    2222        self._hits = self._pages = None 
     23        self._page_range = None 
    2324 
    2425    def validate_page_number(self, page_number): 
     
    8485            self._pages = hits // self.num_per_page + 1 
    8586        return self._pages 
     87     
     88    def _get_page_range(self): 
     89        """ 
     90        Returns a 1-based range of pages for iterating through within  
     91        a template for loop. 
     92        """ 
     93        if self._page_range is None: 
     94            self._page_range = range(1, self._pages + 1) 
     95        return self._page_range 
    8696 
    8797    hits = property(_get_hits) 
    8898    pages = property(_get_pages) 
     99    page_range = property(_get_page_range) 
  • django/trunk/django/views/generic/list_detail.py

    r5877 r6146  
    4040            the result number of the first object in the 
    4141            object_list (1-indexed) 
     42        page_range: 
     43            A list of the page numbers (1-indexed). 
    4244    """ 
    4345    if extra_context is None: extra_context = {} 
     
    6870            'pages': paginator.pages, 
    6971            'hits' : paginator.hits, 
     72            'page_range' : paginator.page_range 
    7073        }, context_processors) 
    7174    else: 
  • django/trunk/docs/generic_views.txt

    r5877 r6146  
    766766      page. 
    767767 
     768    * ``page_range``: A list of the page numbers that are available. This 
     769      is 1-based. 
     770 
    768771Notes on pagination 
    769772~~~~~~~~~~~~~~~~~~~ 
     
    782785        /objects/?page=3 
    783786 
    784 In both cases, ``page`` is 1-based, not 0-based, so the first page would be 
     787    * To loop over all the available page numbers, use the ``page_range``  
     788      variable. You can iterate over the list provided by ``page_range``  
     789      to create a link to every page of results. 
     790 
     791These values and lists are is 1-based, not 0-based, so the first page would be 
    785792represented as page ``1``. 
    786793 
  • django/trunk/tests/modeltests/pagination/models.py

    r5876 r6146  
    7878>>> paginator.pages 
    79792 
     80 
     81# The paginator can provide a list of all available pages 
     82>>> paginator.page_range 
     83[1, 2] 
    8084"""}