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)