2010-04-07 6 views
2

Seuls les commentaires associés à la page en cours devraient être listés, donc encore une fois la requête est modifiée pour inclure l'ID de la page. Dans ce cas, cependant, nous devons également passer l'argument pageid, qui sera à son tour passé à tous les appels h.url_for() dans le paginateur.Pylons paginateur question

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

je ne peux pas obtenir ce travail, le paginator ne passe pas les choses à la h.url_for, j'ai suivi le tutoriel. J'ai dû ajouter pageid à la h.url_for dans list.html. comment puis-je résoudre?

partie du code:

 ${h.link_to(
      comment.id, 
      h.url_for(
       controller=u'comment', 
       action='view', 
       id=unicode(comment.id) 
      ) 
     )} 

mais il ne fonctionne pas correctement jusqu'à ce que je mets dans

 ${h.link_to(
      comment.id, 
      h.url_for(
       controller=u'comment', 
       action='view', 
       id=unicode(comment.id), 
       pageid = c.page.id 
      ) 
     )} 

modifier: le problème est que le tutoriel, il a dit que le paginator passera par avec ce code:

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') 

mais cela ne se produit pas sauf si je l'ai mis manuellement

+0

Utilisez-vous le dernier 1.0 beta 1? – Yaroslav

+0

.97, tel qu'il est utilisé dans le livre – Timmy

Répondre

1

Vous devez transmettre le paramètre pageid à la méthode url_for, car l'identificateur de page est requis par l'itinéraire.

map.connect('/page/{pageid}/{controller}/{action}', requirements={'pageid':'\d+'}) 
map.connect('/page/{pageid}/{controller}/{action}/{id}', requirements={'pageid':'\d+', 'id':'\d+'}) 

Le pageid est ensuite traité dans votre contrôleur de commentaire dans le avant méthode

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) 

Ensuite, le c.page est réglé avec la page actuelle et commentaire peut être un lien vers cette c. page.

+0

merci, je comprends pourquoi il est nécessaire, mais le problème est qu'il prétend qu'il passerait - je vais mettre à jour la question – Timmy