2011-08-17 10 views
17

FlaskはURIエンコードされたコンポーネントを持つルートをサポートしていないようです。私は何か間違っているか、特別な旗が含まれていれば興味があります。URIエンコードされたコンポーネントを持つFlaskルート

@app.route('/foo/<encoded>/bar/') 
def foo(encoded): 
    # ... 
    pass 

これは、これらのように見えることができます一致しなければならないことURL:

http://foobar.com/foo/xxx/bar/ # matched correctly, no URI component 
http://foobar.com/foo/x%2Fx%2Fx%2F/bar/ # not matched correctly, URI component 

元URLの作品、後者は出してくれる素敵な404

私のルートは次のようになります

ありがとう!あなたのURLルールに

答えて

24

追加path:コメントあたり

@app.route('/foo/<path:encoded>/bar/')

更新:ルートのAPIドキュメントはここにある:http://flask.pocoo.org/docs/api/#flask.Flask.routepathスタイルのルートコンバータを実装する基礎となるクラスはここにある:場合

http://werkzeug.pocoo.org/docs/routing/#custom-converters(。これはpocoostanの本当に素敵な部分の一つである)限り最後のスラッシュとして、その量特別な規則がにありますルールがスラッシュで終了し、 ユーザーがスラッシュなしでリクエストすると、ユーザーは 末尾にスラッシュが付いた同じページに自動的にリダイレクトされます。

ルールの末尾にスラッシュがなく、ユーザーが ページの末尾にスラッシュを付けると、404が見つかりません。

はまた、あなたは、Apache上で、スラッシュ-後塵URLを期待している場合、すなわちhttp://ex.com/foo/<path:encoded>/barencodedに提出するブックマークレットをダブルスラッシュで何かを取得することを心に留めておく、Apacheは単一のものに複数のスラッシュに変換します。

+0

Rad、それを修正しました。 – sholsapp

+3

他の誰かが同じ問題を抱えている場合: 'path'を追加していて、' encoded'を追加していないことに気付くまでに数分かかりました。私は 'path'プレフィルタではなく' encoded'ポストフィルタを追加しようとしましたが失敗しました。 – gwg

+0

あなたと私の両方! –

関連する問題