どうやら、Django flatpages が動作する方法は、他のアプリによってスローされた 404 を処理することです。flatpages よりも前に 404 でクラックを取得する別の flatpages タイプのアプリを作成できないかと考えていました。これまでのところ成功せずにこれを試しました。テンプレートはレンダリングされますが、データは送信されません。
それは可能ですか?
どうやら、Django flatpages が動作する方法は、他のアプリによってスローされた 404 を処理することです。flatpages よりも前に 404 でクラックを取得する別の flatpages タイプのアプリを作成できないかと考えていました。これまでのところ成功せずにこれを試しました。テンプレートはレンダリングされますが、データは送信されません。
それは可能ですか?
Djangoのドキュメントに従って、独自のビューを404または500ハンドラーとして指定できます。
handler404 = 'mysite.views.my_custom_404_view'
そのため、アプリでカスタムエラー処理ビューを定義してviews.py
、404または500ビューのハンドラーとして設定できます。urls.py
詳細については、「エラービューのカスタマイズ」を参照してください。
組み込みの 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 がミドルウェアを逆の順序で適用するためです。