質問

ピラミッドによって生成されたルートでサブパスをパラマーとして渡す必要があります。 urllib.encodeとurllib.quoteを使用してみましたが、どちらにしても「リソースが見つかりませんでした」を取得しました。

ルート生成:

mypath='a/b/c'
new_route = route_url('new_model_route', self.request, subpath=urllib.encode(mypath))

私のルート:

config.add_route('new_model_route', '/model/new/{subpath}')

生成されたURL(「リソースが見つかりませんエラー」)

http://127.0.0.1:6544/rnd2/model/new/a%2Fb%2Fc

URLが http://blah/model/new/a 作品。

役に立ちましたか?

解決

ルートパターン /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に一致する新しいルートを作成できます。

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を実際に一致させたくない場合は、追加できます static=Trueadd_route 電話、つまり、あなたはのみ使用していることを意味します route name URLを生成しますが、着信リクエストでそれらを一致させません。

subpathtraverse たまたま特別です(これはすべて文書化されています)が、「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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top