Routes 如何为挂架操作指定默认参数值?

Routes 如何为挂架操作指定默认参数值?,routes,pylons,Routes,Pylons,我有一个动作看起来像这样: class ArticleController(BaseController): def all(self, page, pagesize): class ArticleController(BaseController): def all(self, page, pagesize): return 'Page: %s. Pagesize: %s.' % (page, pagesize) 我希望能够访问/article/all/{p

我有一个动作看起来像这样:

class ArticleController(BaseController):
    def all(self, page, pagesize):
class ArticleController(BaseController):
    def all(self, page, pagesize):
        return 'Page: %s. Pagesize: %s.' % (page, pagesize)
我希望能够访问
/article/all/{page}/{pagesize}
,使用
page
pagesize
的默认值

我尝试在action方法中设置默认值,但是如果我只设置了
page
值,显然
page
pagesize
都会设置为默认值

我也尝试过类似的方法,但也不起作用:

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)
实际上,在这种情况下,当我访问
/
/article/all/
时,它会工作。 但是它不适用于
/article/all
(即使我相应地删除了路由中的尾部
/

查看Routes的文档,在这种情况下,默认值似乎根本不起作用,所以可能是某种行为或未定义的行为

无论如何,我的问题是,在访问
/article/all
/article/all/42
时,如何使用
page
pagesize
的默认值调用
all()


(我知道我可以用查询字符串来代替。
map.redirect()
也可以,但我真的不想重定向。)

您的路由应该是这样的:

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')
您不必在方法本身中放入默认值。因此,您的控制器应如下所示:

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

显然,为同一资源使用多个URL被认为是一种不好的做法()。所以我想我会坚持使用
redirect()
。奇怪的是,它对你不起作用。它与全新的Pylons 1.0 projet完美结合。我猜你的重定向是对的。