2010-10-03 25 views
1

J'ai une action qui ressemble à ceci:Comment spécifier une valeur de paramètre par défaut pour une action Pylons?

class ArticleController(BaseController): 
    def all(self, page, pagesize): 

Je veux être en mesure d'accéder /article/all/{page}/{pagesize}, avec des valeurs par défaut pour page et pagesize.

J'ai essayé de définir les valeurs par défaut dans la méthode d'action, mais apparemment les deux page et pagesize ont la valeur par défaut si je définis uniquement une valeur page.

J'ai aussi essayé quelque chose comme ça, mais ça ne marche pas non plus:

map.connect('/article/all/{page}/{pagesize}', controller='article', 
      action='all') 
map.connect('/', controller='article', action='all', page=0, pagesize=5) 
map.connect('/article/all/', controller='article', action='all', page=0, 
      pagesize=5) 

En fait, dans ce cas, cela fonctionne quand j'accéder / ou /article/all/. Mais cela ne fonctionne pas avec /article/all (même lorsque je supprime le suivi / dans l'itinéraire en conséquence). En regardant la documentation de Routes, il semble que les valeurs par défaut ne devraient pas fonctionner du tout dans ce cas, donc c'est peut-être un comportement type ou indéfini.

Quoi qu'il en soit, ma question est, comment puis-je all() d'être appelé avec les valeurs par défaut pour page et pagesize lors de l'accès /article/all et /article/all/42?

(je sais que je pourrais utiliser la place chaîne de requête map.redirect() aussi-t genre de truc, mais je ne veux pas vraiment rediriger..)

Répondre

2

Vos itinéraires devraient ressembler à ça:

map.connect('/article/all', 
    controller='Article', action='all', 
    page=0, pagesize=5) 
map.connect('/article/all/{page}', 
    controller='Article', action='all', 
    pagesize=5) 
map.connect('/article/all/{page}/{pagesize}', 
    controller='Article', action='all') 

Vous n'avez pas besoin de mettre les valeurs par défaut dans la méthode elle-même. Donc, votre contrôleur devrait ressembler à ceci:

class ArticleController(BaseController): 
    def all(self, page, pagesize): 
     return 'Page: %s. Pagesize: %s.' % (page, pagesize) 
+0

Apparemment, avoir plusieurs URL pour la même ressource est considérée comme une mauvaise pratique (http://pylonsbook.com/en/1.1/urls-routing-and-dispatch. html # route-minimisation). Donc je suppose que je m'en tiendrai à 'redirect()'. –

+0

Bizarre ça ne marche pas pour toi. Il fonctionne parfaitement ici avec un nouveau projet Pylons 1.0. Aussi je suppose que tu as raison avec la redirection. –