Pylons paginator вопрос - PullRequest
       9

Pylons paginator вопрос

2 голосов
/ 07 апреля 2010

Должны быть перечислены только комментарии, связанные с текущей страницей, поэтому запрос снова изменяется, чтобы включить идентификатор страницы. В этом случае, однако, мы также должны передать аргумент pageid, который, в свою очередь, будет передан любым вызовам h.url_for () в paginator.

от http://pylonsbook.com/en/1.1/simplesite-tutorial-part-2.html

я не могу заставить это работать, paginator не передает вещи в h.url_for, я следовал за руководством. мне пришлось добавить pageid к h.url_for в list.html. как мне решить?

часть кода:

        ${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
            )
        )}

edit: проблема в том, что в руководстве сказано, что paginator будет проходить с этим кодом:

    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 Ответ

1 голос
/ 08 апреля 2010

Вам необходимо передать 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

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.

...