見つかったチュートリアルに従ってここ正確には、カスタム 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