如何使用webhelpers.paginate分页中保持的查询参数
-
19-09-2019 - |
题
这是我在我的控制器何时上市。
def list(self, page=1, **kw):
q = ""
if kw.has_key('q'):
log.debug("searching %s" % kw)
q = kw['q']
if kw.has_key('all'):
q = ""
products = DBSession.query(model.Product).filter(
or_(model.Product.name.like('%%%s%%' % q),
model.Product.description.like('%%%s%%' % q),
model.Product.model.like('%%%s%%' % q),
model.Product.code.like('%%%s%%' % q))).all()
def get_link(product):
return Markup("""<a href="form?id=%s">%s</a>""" % (product.id, product.id))
product_fields = [
(Markup("""<a href="?s=id">Id</a>"""), get_link),
(u'Name', 'name'),
(u'Model', 'model'),
(u'Code', 'code'),
(u'Description', 'description')]
product_grid = MyDataGrid(fields = product_fields)
currentPage = paginate.Page(products, page, items_per_page=50)
return dict(currentPage=currentPage,
title=u'Products List', item=u'product', items=u'products',
data=currentPage.items,
grid=product_grid,
page=u'Search %s results' % q,
q=q,
hits=len(products))
这是HTML模板片段
<h1>List of ${items}</h1>
<form action="list" method="get">
<input name="q" type="text" value="${value_of('q', default='')}"/>
<input type="submit" value="Search"/> <input type="submit" name="all" value="All"/>
</form>
${hits} ${items} found
<p class="pagelist">${currentPage.pager(format='$link_first ~3~ $link_last')}</p>
<div>
${grid(data)}
</div>
<p><a href="${tg.url('form')}">Add a ${item}</a></p>
在搜索工作正常导致像这样的链接“的 /列表?Q =电缆的”,但是当我点击了分页页面的“1,2 ...... 8,9”变为“ /列表?页= 2
如何添加我以前的查询参数或任何其他参数的链接?
解决方案
实验在壳一段时间后我想我找到一个解决方案。
有一个在当前页所定义(从paginate.Page被分配之后)kwargs字典,所以我提出了一些实验参数发送和它的工作。这是如何。
currentPage = paginate.Page(products, page, items_per_page=50)
currentPage.kwargs['q'] = q
return dict(currentPage=currentPage,
title=u'Products List', item=u'product', items=u'products',
data=currentPage.items,
grid=product_grid,
page=u'Search %s results' % q,
q=q,
hits=len(products))
现在我得到这样的链接: /列表Q =电缆&页= 2 的?还是想知道它是否是最好的解决办法或最佳实践的
其他提示
你应该使用的语法如下:
currentPage.kwargs['q'] = q
currentPage = paginate.Page(
products,
page,
items_per_page=50,
q = q
)
可以更新请求参数,这样的片段。
def paginate(self, items, items_per_page=20):
"""https://bitbucket.org/bbangert/webhelpers/src/acfb17881c1c/webhelpers/paginate.py"""
current_page = self.request.GET.get('page') or 1
def page_url(page):
params = self.request.params.copy()
params['page'] = page
return self.request.current_route_url(_query=params)
return Page(collection=items, page=current_page, items_per_page=items_per_page, url=page_url)
不隶属于 StackOverflow