不明なパスにアクセスしたときにカスタム 500/404 エラー ページが表示されない 質問する

不明なパスにアクセスしたときにカスタム 500/404 エラー ページが表示されない 質問する

見つかったチュートリアルに従ってここ正確には、カスタム 500 または 404 エラー ページを作成することはできません。間違った URL を入力すると、デフォルトのエラー ページが表示されます。カスタム ページが表示されないようにするためにチェックすべきことはありますか?

ファイルディレクトリ:

mysite/
    mysite/
        __init__.py
        __init__.pyc
        settings.py
        settings.pyc
        urls.py
        urls.pyc
        wsgi.py
        wsgi.pyc
    polls/
        templates/
            admin/
                base_site.html
            404.html
            500.html
            polls/
                detail.html
                index.html
        __init__.py
        __init__.pyc
        admin.py
        admin.pyc
        models.py
        models.pyc
        tests.py
        urls.py
        urls.pyc
        view.py
        views.pyc
    templates/
    manage.py
    

以下mysite/settings.pyを有効にしています:

DEBUG = False
TEMPLATE_DEBUG = DEBUG

#....

TEMPLATE_DIRS = (
    'C:/Users/Me/Django/mysite/templates', 
)

内でmysite/polls/urls.py

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)

必要な他のコードを投稿することはできますが、不正な URL を使用した場合にカスタム 500 エラー ページを取得するには何を変更する必要がありますか?

ベストアンサー1

メインの下にviews.py次の2つのビューの独自のカスタム実装を追加し、テンプレートを設定するだけです。404.htmlそして500.html表示したい内容を入力します。

このソリューションでは、カスタムコードを追加する必要はなく、urls.py

コードは次のとおりです:

from django.shortcuts import render_to_response
from django.template import RequestContext


def handler404(request, *args, **argv):
    response = render_to_response('404.html', {},
                                  context_instance=RequestContext(request))
    response.status_code = 404
    return response


def handler500(request, *args, **argv):
    response = render_to_response('500.html', {},
                                  context_instance=RequestContext(request))
    response.status_code = 500
    return response

アップデート

handler404および は、handler500にあるエクスポートされた Django 文字列構成変数ですdjango/conf/urls/__init__.py。これが、上記の構成が機能する理由です。

上記の設定を機能させるには、urls.pyファイルで次の変数を定義し、エクスポートされた Django 変数を、これらの Django 機能ビューが定義されている文字列 Python パスにポイントする必要があります。

# project/urls.py

handler404 = 'my_app.views.handler404'
handler500 = 'my_app.views.handler500'

Django 2.0 のアップデート

Django 2.0 ではハンドラー ビューのシグネチャが変更されました。https://docs.djangoproject.com/en/2.0/ref/views/#エラービュー

上記のようにビューを使用すると、handler404 は次のメッセージで失敗します:

「handler404() が予期しないキーワード引数 'exception' を取得しました」

このような場合は、ビューを次のように変更します。

def handler404(request, exception, template_name="404.html"):
    response = render_to_response(template_name)
    response.status_code = 404
    return response

おすすめ記事