2010-10-03 42 views
1

我有一個動作,看起來像這樣:如何爲Pylons操作指定默認參數值?

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

我希望能夠訪問/article/all/{page}/{pagesize},採用默認值的pagepagesize

我嘗試設置操作方法的默認值,但顯然pagepagesize設置爲默認值,如果我只設置page值。

我也嘗試過這樣的事情,但它不工作之一:

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()與默認值呼籲pagepagesize訪問/article/all/article/all/42時?

(我知道我可以使用查詢字符串,而不是map.redirect()還種的伎倆,但我真的不希望重定向。)

回答

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) 
+0

顯然,具有相同的資源多個URL被認爲是一種不好的做法(http://pylonsbook.com/en/1.1/urls-routing-and-dispatch。 HTML#路由最小化)。所以我想我會堅持'重定向()'。 – 2010-10-03 10:01:03

+0

奇怪它不適合你。它使用全新的Pylons 1.0 projet在這裏完美工作。另外我想你是正確的重定向。 – 2010-10-03 13:33:55