This is one of those cases of mixing your controller with your view. Please 
don't do that. 

Look here for that...
http://en.wikipedia.org/wiki/Link_prefetching

and please keep your html out of your controllers. they should only go in 
views.

On Monday, August 18, 2014 1:07:00 AM UTC-7, Giacomo Dorigo wrote:
>
> In the end I solved with two simple classes, without using cache, but with 
> two queries, one counting total items and one limited by limitby. Also I 
> have looked in slices and I found some pagination plugins.
>
> Anyway here the basic code:
>
>
> class PageThread(object):
>     def __init__(self, query, items_per_page=10):
>         self.query = query
>         self.items_count = db(self.query).count()
>         self.items_per_page = items_per_page
>         self.__set_number_of_pages()
>             
>     def __set_number_of_pages(self):
>         self.number_of_pages = self.items_count/self.items_per_page + 1 if 
> self.items_count % self.items_per_page else 
> self.items_count/self.items_per_page
>
>     def serve_page(self, page_id):
>         page_items = 
> db(self.query).select(limitby=((page_id-1)*self.items_per_page, 
> page_id*self.items_per_page))
>         p = Page(page_id, page_items)
>         p.previous_pages = [n for n in range(1, page_id)]
>         p.next_pages = [n for n in range(page_id+1, 
> self.number_of_pages+1)]
>         return p
>
>
> class Page(object):
>     def __init__(self, id, items):
>         # id is the unique number of the page in the PageThread
>         self.id = id
>         self.items = items
>
>     def __str__(self):
>         return 'Page n.{}, {} items: {}'.format(self.id, len(self.items), 
> self.items)
>
>     def get_page_navigation_div(self, **request_vars):
>         request_vars.update({'items_per_page': len(self.items)})
>         previous_pages_subdiv = DIV(_class='previous-pages-subdiv')
>         next_pages_subdiv = DIV(_class='next-pages-subdiv')
>         if self.previous_pages:
>             request_vars.update({'page': self.id-1})
>             previous_pages_subdiv.append( A('<<< previous', 
> _class='nav-previous-link', _href=URL(vars=request_vars)) )
>         for n in self.previous_pages:
>             request_vars.update({'page': n})
>             previous_pages_subdiv.append( A(' %s' % n, 
> _class='nav-previous-pages', _href=URL(vars=request_vars)) )
>         for n in self.next_pages:
>             request_vars.update({'page': n})
>             next_pages_subdiv.append( A(' %s' % n, 
> _class='nav-next-pages', _href=URL(vars=request_vars)) )
>         if self.next_pages:
>             request_vars.update({'page': self.id+1})
>             next_pages_subdiv.append( A(' next >>>', 
> _class='nav-next-link', _href=URL(vars=request_vars)) )
>         return DIV(previous_pages_subdiv, next_pages_subdiv, 
> _class='page-navigation-div')
>
>     def get_style(self):
>         style = STYLE("""\
>         .page-navigation-div {
>             width: 1170px;
>         }
>         .page-navigation-div div {
>             display: inline;
>         }
>         .page-navigation-div .next-pages-subdiv{
>             float: right;   
>         }
>         """)
>         return style
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to