Table of Contents
This is just a little hint how to get around those ugly URL query parameters that the @paginate decorator generates.
Say have this simple controller:
class Users(Controller):
@expose(...)
@paginate('users')
def index(self):
return dict(users=User.query())
${tg.paginate.get_href(page)} would generate an URL like this:
/users?users_tgp_no=2&users_tgp_limit=5
That’s not beautiful.
But it’s quite simple to achieve pagination with URLs like these:
/paginate1/page/2
You just have to create an additional exposed method page that will “translate” the requested page into the desired kwarg and call the original method:
@expose()
def page(self, page):
return self.index(users_tgp_page=page)
Basically that’s it. But you cannot use paginate.get_href anymore. I generated the URLs manually in my (Genshi) template:
# Generate RESTful pagination URLs: /foo/bar/page/42
import cherrypy
base = cherrypy.request.path
if not base.endswith('/'):
base += '/'
current_page_path = '/page/' + str(tg.paginate.current_page) + '/'
if base.endswith(current_page_path):
base = base[:-len(current_page_path) + 1]
You then just create links like this:
<a href="${base}page/$page" py:if="page != tg.paginate.current_page">$page</a>
Maybe anyone can make use of this :)
Note
If you want a RESTful pagination for any other method than index, you have to create an additional controller with an index and page method and attach this controller to the parent.