2010-04-07 2 views
2

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

из 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 
      ) 
     )} 

редактирования: проблема в том, что на уроке он сказал, что 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') 

но это не произойдет, если я не поставил его вручную

+0

Вы используете последнюю версию 1.0 beta 1? – Yaroslav

+0

.97, как используется в книге – Timmy

ответ

1

Вам необходимо передать страницу по адресу url_for, потому что для этого требуется ссылка на страницу.

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 устанавливается с текущей страницы и комментарий может быть ссылка на с. стр.

+0

спасибо, я понимаю, почему это требуется, но проблема в том, что он утверждает, что пройдет - я обновлю вопрос – Timmy