Adding page navigation (pagination), as factored out into its own class.
This commit is contained in:
parent
681e11e9a7
commit
d577455091
|
@ -0,0 +1,59 @@
|
|||
from Tags import P, Span, A, Strong
|
||||
|
||||
class Page_navigation( P ):
|
||||
def __init__( self, page_path, displayed_item_count, total_item_count, start, items_per_page, return_text = None ):
|
||||
if start is None or items_per_page is None:
|
||||
P.__init__( self )
|
||||
return
|
||||
|
||||
if displayed_item_count == 1 and displayed_item_count < total_item_count:
|
||||
if not return_text:
|
||||
P.__init__( self )
|
||||
return
|
||||
|
||||
P.__init__(
|
||||
self,
|
||||
Span(
|
||||
A(
|
||||
return_text,
|
||||
href = "%s" % page_path,
|
||||
),
|
||||
),
|
||||
)
|
||||
return
|
||||
|
||||
if start == 0 and items_per_page >= total_item_count:
|
||||
P.__init__( self )
|
||||
return
|
||||
|
||||
P.__init__(
|
||||
self,
|
||||
( start > 0 ) and Span(
|
||||
A(
|
||||
u"previous",
|
||||
href = self.href( page_path, max( start - items_per_page, 0 ), items_per_page ),
|
||||
),
|
||||
u" | ",
|
||||
) or None,
|
||||
[ Span(
|
||||
( start == page_start ) and Strong( unicode( page_number + 1 ) ) or A(
|
||||
Strong( unicode( page_number + 1 ) ),
|
||||
href = self.href( page_path, page_start, items_per_page ),
|
||||
),
|
||||
) for ( page_number, page_start ) in enumerate( range( 0, total_item_count, items_per_page ) ) ],
|
||||
( start + items_per_page < total_item_count ) and Span(
|
||||
u" | ",
|
||||
A(
|
||||
u"next",
|
||||
href = self.href( page_path, min( start + items_per_page, total_item_count - 1 ), items_per_page ),
|
||||
),
|
||||
) or None,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def href( page_path, start, count ):
|
||||
# if start is zero, leave off start and count parameters and just use the defaults
|
||||
if start == 0:
|
||||
return page_path
|
||||
|
||||
return u"%s?start=%d&count=%d" % ( page_path, start, count )
|
Reference in New Issue