2012-04-28 9 views
3

私は疑問に思っていました:
ルート設定のパターン内にデフォルト値を指定することはできますか?
例:データセットにバインドされたファイルの(潜在的に大きな)リストを示すビューがあります。 ビューを分割して各ページに100ファイルを表示するページで分割したいとします。 urlパターンのページ部分を省略すると、最初のページが表示されます。ピラミッド:ルートパターンのデフォルト値

config.add_route('show_files', '/show_files/{datasetid}/{page=1}) 

こと、または合理的な努力でなんとか代替です:
だから私のようなものを持っているしたいのですが? ピラミッドのドキュメントのルート構文の説明で何も見つかりませんでした。

ありがとうございます!

答えて

2

いいえ、剰余一致を使用してページをオプションにしてから、実際のロジックに表示するページを決めることができます。

http://readthedocs.org/docs/pyramid/en/master/narr/urldispatch.html

他のオプションは、単にあなたのページがGET変数ではなく、URLの一部であることです。

+0

ありがとう、残りの試合は私が逃したものでした – Chris

12

あなたはおそらくthis answerに満足しているかもしれませんが、別のオプションは同じビューにディスパッチする複数のルートを使用することです。

1

これを設定するには、custom predicateを使用します。 matchdictの変更は明示的に許可されます。

def matchdict_default(**kw): 
    def f(info, request): 
     for k, v in kw.iteritems(): 
      info['match'].setdefault(k, v) 
     return True 
    return f 

config.add_route(
    'show_files', 
    '/show_files/{datasetid}/{page}') 
config.add_route(
    'show_files', 
    '/show_files/{datasetid}', 
    custom_predicates=(matchdict_default(page=1),)) 
0

Thomas Jungsの例を動作させることができませんでした。私は、iteritems()を使わずにキーを反復することでThomas Jungの例題を得ることができました。

def matchdict_default(**kw): 
def f(info, request): 
    for k in kw: 
     info['match'].setdefault(k, kw[k]) 
    return True 
return f 

config.add_route(
'show_files', 
'/show_files/{datasetid}/{page}') 
config.add_route(
'show_files', 
'/show_files/{datasetid}', 
custom_predicates=(matchdict_default(page=1),))` 

now both of the following urls resolve to the page value, and, urls 
can be created without needing to include a query 
parameter 

/show_files/an_id/ 
/show_files/an_id/?page=1