[python] Django, 사용자 지정 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 오류 페이지를 얻으려면 무엇을 변경해야합니까?
편집하다
솔루션 :
추가로
TEMPLATE_DIRS
내 settings.py 내에서 문제가 발생했습니다.
답변
기본 아래 views.py
에 다음 두 가지보기의 사용자 정의 구현을 추가 하고 표시하려는 항목으로 템플릿 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/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/#error-views
위와 같이 뷰를 사용하면 handler404가 다음 메시지와 함께 실패합니다.
“handler404 ()에 예기치 않은 키워드 인수 ‘예외’가 있습니다.”
이 경우 다음과 같이보기를 수정하십시오.
def handler404(request, exception, template_name="404.html"):
response = render_to_response(template_name)
response.status_code = 404
return response
답변
공식 답변 :
다음은 사용자 지정 오류보기를 설정하는 방법에 대한 공식 문서에 대한 링크입니다.
https://docs.djangoproject.com/en/stable/topics/http/views/#customizing-error-views
URLconf에 다음과 같은 줄을 추가하라는 메시지가 표시됩니다 (다른 곳에 설정해도 효과가 없습니다).
handler404 = 'mysite.views.my_custom_page_not_found_view'
handler500 = 'mysite.views.my_custom_error_view'
handler403 = 'mysite.views.my_custom_permission_denied_view'
handler400 = 'mysite.views.my_custom_bad_request_view'
설정을 수정하여 CSRF 오류보기를 사용자 정의 할 수도 있습니다 CSRF_FAILURE_VIEW
.
기본 오류 처리기 :
기본 오류 처리기의 문서를 읽고 그것의 가치, page_not_found
, server_error
, permission_denied
와 bad_request
. 그들은 각각 그들을 찾아 낼 수있는 경우에 기본적으로, 그들은 이러한 템플릿을 사용 : 404.html
, 500.html
, 403.html
,와 400.html
.
따라서 원하는 모든 것이 오류 페이지를 만드는 것뿐이라면 TEMPLATE_DIRS
디렉토리에 해당 파일을 생성 하면 URLConf를 전혀 편집 할 필요가 없습니다. 사용 가능한 컨텍스트 변수를 보려면 문서를 읽으십시오.
Django 1.10 이상에서 기본 CSRF 오류보기는 템플릿을 사용합니다 403_csrf.html
.
잡았다 :
그는 잊지 마세요 DEBUG
작업에이 false로 설정해야합니다, 그렇지 않으면 정상적인 디버그 핸들러가 사용됩니다.
답변
urls.py에 다음 줄을 추가하십시오.
urls.py
from django.conf.urls import (
handler400, handler403, handler404, handler500
)
handler400 = 'my_app.views.bad_request'
handler403 = 'my_app.views.permission_denied'
handler404 = 'my_app.views.page_not_found'
handler500 = 'my_app.views.server_error'
# ...
views.py에서 커스텀 뷰를 구현합니다.
views.py
from django.shortcuts import (
render_to_response
)
from django.template import RequestContext
# HTTP Error 400
def bad_request(request):
response = render_to_response(
'400.html',
context_instance=RequestContext(request)
)
response.status_code = 400
return response
# ...
답변
참조한 페이지에서 :
뷰 내에서 Http404를 발생 시키면 Django는 404 오류를 처리하는 특수 뷰를로드합니다. 루트 URLconf에서 변수 handler404를 찾아 찾습니다 (루트 URLconf에서만, 다른 곳에 handler404를 설정하면 효과가 없음). Python 점으로 구분 된 구문의 문자열 인 일반 URLconf 콜백에서 사용하는 것과 동일한 형식입니다. 404보기 자체에는 특별한 것이 없습니다. 단지 일반적인보기 일뿐입니다.
따라서 urls.py에 다음과 같은 내용을 추가해야한다고 생각합니다.
handler404 = 'views.my_404_view'
handler500과 유사합니다.
답변
에서 사이트에 대한 멋진 오류 메시지가있는 사용자 정의 페이지를 표시하는 것이 필요한 경우 DEBUG = False
템플릿 디렉토리에 404.html 및 500.html이라는 두 개의 템플릿을 추가하면 404 또는 500 일 때이 사용자 정의 페이지가 자동으로 선택됩니다. 제기됩니다.
답변
에서 장고 2. * 당신은이 건설 사용할 수 있습니다 views.py를
def handler404(request, exception):
return render(request, 'errors/404.html', locals())
에서 settings.py
DEBUG = False
if DEBUG is False:
ALLOWED_HOSTS = [
'127.0.0.1:8000',
'*',
]
if DEBUG is True:
ALLOWED_HOSTS = []
에서 urls.py
# https://docs.djangoproject.com/en/2.0/topics/http/views/#customizing-error-views
handler404 = 'YOUR_APP_NAME.views.handler404'
일반적으로 나는 default_app을 만들고 사이트 전체 오류, 컨텍스트 프로세서를 처리합니다.
답변
settings.py :
DEBUG = False
TEMPLATE_DEBUG = DEBUG
ALLOWED_HOSTS = ['localhost'] #provide your host name
템플릿 폴더에 404.html
및 500.html
페이지를 추가하기 만하면 됩니다. 제거 404.html
및 500.html
설문 조사 응용 프로그램 템플릿에서.