如何为Pylons操作指定默认参数值?

时间:2010-10-03 00:01:51

标签: routes pylons

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

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

我希望能够使用/article/all/{page}/{pagesize}page的默认值访问pagesize

我尝试在操作方法中设置默认值,但是如果我只设置page值,则显然pagesizepage都会设置为默认值。

我也试过这样的事情,但它也不起作用:

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的文档,看起来默认值在这种情况下根本不起作用,所以可能是某种或未定义的行为。

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

(我知道我可以使用查询字符串。map.redirect()也可以解决问题,但我真的不想重定向。)

1 个答案:

答案 0 :(得分:2)

您的路线应如下:

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):
        return 'Page: %s. Pagesize: %s.' % (page, pagesize)