仅列出与当前页面相关的注释,因此再次修改查询以包括页面ID。但是,在这种情况下,我们还必须传递pageid参数,该参数又将传递给分页器中的任何h.url_for()调用。
来自http://pylonsbook.com/en/1.1/simplesite-tutorial-part-2.html
我无法使它正常工作,分页器没有将内容传递给h.url_for,我遵循了教程。我必须将pageid添加到list.html中的h.url_for中。我该如何解决?
部分代码:
${h.link_to(
comment.id,
h.url_for(
controller=u'comment',
action='view',
id=unicode(comment.id)
)
)}
但直到我放入后它才能正常工作
${h.link_to(
comment.id,
h.url_for(
controller=u'comment',
action='view',
id=unicode(comment.id),
pageid = c.page.id
)
)}
编辑:问题是在教程上它说分页器将通过以下代码传递:
c.paginator = paginate.Page(
comments_q,
page=int(request.params.get('page', 1)),
items_per_page=10,
pageid=c.page.id,
controller='comment',
action='list'
)
return render('/derived/comment/list.html')
但是除非我手动将其放入,否则不会发生
最佳答案
您需要将pageid传递给url_for方法,因为路由需要该pageid。
map.connect('/page/{pageid}/{controller}/{action}', requirements={'pageid':'\d+'})
map.connect('/page/{pageid}/{controller}/{action}/{id}', requirements={'pageid':'\d+', 'id':'\d+'})
然后在before方法中在您的注释控制器中处理pageid
def __before__(self, action, pageid=None):
page_q = meta.Session.query(model.Page)
c.page = pageid and page_q.filter_by(id=int(pageid)).first() or None
if c.page is None:
abort(404)
然后,将c.page设置为当前页面,并可以将注释链接到此c.page。