仅列出与当前页面相关的注释,因此再次修改查询以包括页面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。

10-08 07:41