3

どうやら、Django flatpages が動作する方法は、他のアプリによってスローされた 404 を処理することです。flatpages よりも前に 404 でクラックを取得する別の flatpages タイプのアプリを作成できないかと考えていました。これまでのところ成功せずにこれを試しました。テンプレートはレンダリングされますが、データは送信されません。

それは可能ですか?

4

2 に答える 2

3

Djangoのドキュメントに従って、独自のビューを404または500ハンドラーとして指定できます。

handler404 = 'mysite.views.my_custom_404_view'

そのため、アプリでカスタムエラー処理ビューを定義してviews.py、404または500ビューのハンドラーとして設定できます。urls.py

詳細については、「エラービューのカスタマイズ」を参照してください。

于 2009-04-28T02:55:26.720 に答える
1

組み込みの flatpages アプリが機能する方法は、いくつかのミドルウェアを使用したものです。ミドルウェアには、送信応答の 404 ステータス コードをチェックする「process_response」という関数があります。応答が 404 で、URL がフラットページと一致する場合、ミドルウェアは 404 を抑制し、レンダリングされたフラットページを返します。

独自のミドルウェアでも同じことができます。コードが flatpages コードの前に呼び出されるようにするには、設定でミドルウェアをflatpages の後に配置する必要があります。MIDDLEWARE_CLASSES

# in settings.py
MIDDLEWARE_CLASSES = (
    # ...
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'myapp.middleware.MyMiddlewareClass',
)

前ではなく後になっている理由は、応答段階で Django がミドルウェアを逆の順序で適用するためです。

于 2009-04-28T20:02:42.273 に答える