Mercurial > piecrust2
comparison piecrust/data/paginator.py @ 15:dc8a6ff88f37
Fix how the `Paginator` gets the numer of items per page.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 18 Aug 2014 16:51:16 -0700 |
parents | f5ca5c5bed85 |
children | f130365568ff |
comparison
equal
deleted
inserted
replaced
14:395eb38f2dfb | 15:dc8a6ff88f37 |
---|---|
19 'items_this_page', 'prev_page_number', 'this_page_number', | 19 'items_this_page', 'prev_page_number', 'this_page_number', |
20 'next_page_number', 'prev_page', 'next_page', | 20 'next_page_number', 'prev_page', 'next_page', |
21 'total_item_count', 'total_page_count', | 21 'total_item_count', 'total_page_count', |
22 'next_item', 'prev_item'] | 22 'next_item', 'prev_item'] |
23 | 23 |
24 def __init__(self, page, source, uri, page_num=1, pgn_filter=None): | 24 def __init__(self, page, source, uri, page_num=1, pgn_filter=None, |
25 items_per_page=-1): | |
25 self._parent_page = page | 26 self._parent_page = page |
26 self._source = source | 27 self._source = source |
27 self._uri = uri | 28 self._uri = uri |
28 self._page_num = page_num | 29 self._page_num = page_num |
29 self._iterator = None | 30 self._iterator = None |
30 self._pgn_filter = pgn_filter | 31 self._pgn_filter = pgn_filter |
32 self._items_per_page = items_per_page | |
31 self._pgn_set_on_ctx = False | 33 self._pgn_set_on_ctx = False |
32 | 34 |
33 @property | 35 @property |
34 def is_loaded(self): | 36 def is_loaded(self): |
35 return self._iterator is not None | 37 return self._iterator is not None |
81 def has_items(self): | 83 def has_items(self): |
82 return self.posts_this_page > 0 | 84 return self.posts_this_page > 0 |
83 | 85 |
84 @cached_property | 86 @cached_property |
85 def items_per_page(self): | 87 def items_per_page(self): |
88 if self._items_per_page > 0: | |
89 return self._items_per_page | |
86 if self._parent_page: | 90 if self._parent_page: |
87 ipp = self._parent_page.config.get('items_per_page') | 91 ipp = self._parent_page.config.get('items_per_page') |
88 if ipp is not None: | 92 if ipp is not None: |
89 return ipp | 93 return ipp |
90 return self._source.getItemsPerPage() | 94 if isinstance(self._source, IPaginationSource): |
95 return self._source.getItemsPerPage() | |
96 raise Exception("No way to figure out how many items to display " | |
97 "per page.") | |
91 | 98 |
92 @property | 99 @property |
93 def items_this_page(self): | 100 def items_this_page(self): |
94 self._load() | 101 self._load() |
95 return len(self._iterator) | 102 return len(self._iterator) |