Pylons paginator问题

时间:2010-04-07 17:38:24

标签: python pylons

  

只应列出与当前页面关联的注释,因此将再次修改查询以包含页面ID。但是,在这种情况下,我们还必须传递pageid参数,该参数将传递给paginator中的任何h.url_for()调用。

来自http://pylonsbook.com/en/1.1/simplesite-tutorial-part-2.html

我不能让这个工作,paginator没有把东西传递给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')

但除非我手动将其放入

,否则不会发生

1 个答案:

答案 0 :(得分:1)

您需要将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+'})

然后在评论控制器的之前方法

中处理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。