0

Satchmo での Flatpages の構成に問題があります。以前は純粋な django アプリで使用していましたが、フラットページ構成のサイトに入ろうとすると 301 http エラーが返され、機能しなくなりました。

それを構成するために私がしたこと:

  • ミドルウェア「django.contrib.flatpages.middleware.FlatpageFallbackMiddleware」をリストの最後に MIDDLEWARE_CLASSES に追加し、
  • 管理モジュールで構成されたサンプル ページ。

フラットページの設定についてドキュメントに書かれていることだけです。

どうしようもない気持ちです。この問題をデバッグする方法がわかりません。それについて何か考えはありますか?

そしてもちろん、助けていただければ幸いです。

Peter の提案のおかげで、satchmo ショップの urls.py ファイルに問題を絞り込むことができました。

urlpatterns にはエントリが 1 つだけあります。

(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),

このバージョンは機能せず、さらにフラットページに干渉します。ただし、MIDDLEWARE_CLASSES からフラットページを無効にして、以下のスニペットのように urls.py に追加すると機能します。

(r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage'),
(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),

ただし、次の問題は から/へのリダイレクトにあり/shop/ます。上記の構成では、無限ループになります。

おそらく、その動作の理由 (フラットページのリダイレクトのオーバーライド) を知っているでしょう/

4

1 に答える 1

1

301? を返します。それは永続的に移動されたページ(HttpResponsePermanentRedirect)であり、flatpagesディレクトリにはそれへの参照がないため、そこから来ているとは思いません。HttpResponsePermanentRedirect実際、標準の 1.1.1 リリース全体で約 5 つの参照しかありません。

可能なアプローチ:

  1. FlatPages ミドルウェアをコメント アウトし、エラーが変化するかどうかを確認します (変わらないはずです)。
  2. MIDDLEWARE クラスの順序を変更してみて、状況が変わるかどうかを確認してください。

このような問題を提示するときは、settings.py の該当する部分 (または何でも) から正確なコードを表示し、正確な URL や一致させようとしている urls.py パターンなどの他のものを提供することにより、非常に具体的にすることをお勧めします。

アップデート:

OK、いくつかのランダムな考え:

  1. (r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage'),は何にでも合います。それ以降のパターンは決して見られません。

  2. flatpages直接呼び出されても機能せず、ミドルウェアで魔法を行います。404 応答 (ページが見つかりません) を探し、そのパスがテーブルに存在するかどうかを確認します。一致するものが見つからない場合は、404 でミドルウェア処理を続行します。

  3. パターン(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),は何にでも一致します (私はちょうどそれをテストしました)。空のパスに一致させたい場合は、 を使用しますr('^$', etc.)。これが無限ループの原因です。

正規表現に慣れていない場合、Django の urls.py ファイルは魔法のように思えるかもしれません。非常に単純に開始して、一度に 1 つのルールを追加することをお勧めします。簡単なテストを行って、新しいルールが a) 一致させたいものと一致すること、および b)一致すべきでないものと一致しないことを確認します。特に、ファイル内で後で発生するルールの一部がまだ到達可能であることを確認してください。この場合、彼らは危険信号を発するべきではなかったでしょう。

于 2009-12-18T22:59:20.760 に答える