ルートパターン/model/new/{subpath}
は決して/model/new/a/b/c
と一致しないので、そのパターンのURLを生成できる理由はわかりません。
しかし、残りのURLを要素として渡すことは可能です。
config.add_route('new_model_route', '/model/new/{subpath}')
request.route_url('new_model_route', 'b', 'c', subpath='a')
# /model/new/a/b/c
一方、別の選択肢があります。あなたが実際に何らかの理由でこれらのURLと一致したくなかった場合、あなたはあなたがしていることを意味add_route
コールにstatic=True
を追加することができます
config.add_route('new_model_route', '/model/new/*subpath')
# matches /model/new/a, /model/new/a/b, etc
request.route_url('new_model_route', subpath=('a', 'b', 'c'))
# /model/new/a/b/c
:あなたのような、これらのURLと一致するように、新しいルートを作成することができますroute name
のみを使用してURLを生成しますが、着信要求に一致させることはありません。
subpath
とtraverse
特別なことが起こる(これはすべて文書化されて)いますが、「A/B/C」を使用して上の暴勇した場合は、ルートパターンで何か他のものを使用することができます。
config.add_route('new_model_route', '/model/new/*rest')
# matches /model/new/a, /model/new/a/b, etc
request.route_url('new_model_route', rest='a/b/c')
# /model/new/a/b/c
ああと私はロールしているので、あなたのシステムにすでにあるかもしれないより簡単なURLで元のアプローチを使うことができます。
config.add_route('new_model_route', '/model/new')
# matches /model/new only
request.route_url('new_model_route', 'a', 'b', 'c')
# /model/new/a/b/c
/* restメソッドは私が必要とするものの大半を占めているようですが、これらのパラメータ(a/b/c)をすべて単一の文字列として扱う方法はありますか?今、私は新しい見方でそれらを再び参加させなければなりません。 – sutee
'* rest'構文を使うと、Pyramidは常にそのURLの残りをタプルに変換します。リクエストオブジェクトには他の属性がありますが、 'request.path'のように、マッチしたルートから独立しています。あなたはおそらく 'rest = '/'。join(request.matchdict ['rest'])'をしなければならないでしょう。 –
タプルのどの部分がパラメータであり、他の部分が何であったかを伝える必要があるので、* rest構文を使用して他のパラメータを渡したければ、問題が発生すると思いますか? – sutee