1

Pylons アプリでルートのテーブルを作成しています。redirect() を正常に動作させることができません。何が間違っているのかわかりません。

Routes documentationからの redirect() の使用例を次に示します。

map.redirect("/home/index", "/", _redirect_code="301 Moved Permanently")

これが私のrouting.pyファイルに表示されるものです:

map.redirect("/view", "/", _redirect_code="301 Moved Permanently")

これは、routing.py ファイルの最後に表示される redirect() を使用したルートです。

map.redirect('/*(url)/', '/{url}', _redirect_code="301 Moved Permanently")

このルートは問題なく機能するため、redirect() が存在し、機能していることはわかっています。したがって、/view リダイレクトで何か間違ったことをしています。ブラウザで /view を指定すると、リダイレクトされずに 404 ページが表示されるため、これはわかっています。/ に行くと問題なく動作するので、そこにも問題はないと思います。Routes の redirect() は素晴らしいアイデアだと思います。意図したとおりに使用できるようにしたいと考えていますが、ここで何が間違っているのかわかりません。

ETA @jasonjs: 他に一致するルートはないと思います。/view にアクセスして Paster の出力を確認すると、次のような結果が得られます。

21:22:26,276 DEBUG [routes.middleware] No route matched for GET /view

これは私にはかなり決定的なようです。/view への POST リクエストに一致するルートがあることに注意してください。

map.connect('/view', controller='view', action='search', conditions=dict(method=['POST'])

そのルートも正しく機能し、 /view[GET] ルートとの一致を試みる前にそれとの一致を試みるように、以前に routing.py にリストしました。

4

1 に答える 1

1

その構文は機能するので、何か他のことが起こっているに違いありません。

ルートは順序に敏感です。/viewリダイレクトの上に、404 を返すコントローラーに一致する別のルートはありますか?

Routes は末尾のスラッシュにも敏感です。間違ってブラウザーに末尾のスラッシュを入力したが、ルートには入力しなかったか、またはその逆でしたか?

最後に、 でdevelopment.iniを設定level = DEBUGする[logger_routes]と、アクセス後にログ メッセージをチェックして、/view何が一致したかを確認できます。

ETA: 同じパスのリダイレクトの前に POST マッチング ルールを配置しようとしたところ、期待どおりに機能しました。Routes の最新バージョン (1.11) を使用していますか? そうでなければ、コードを見ることができないので、他に何もありません。必要最小限のテストケースから始めて、それが壊れるまで積み上げていくか、うまくいくまで何かを取り除くだけかもしれません...

于 2009-10-06T17:16:19.753 に答える