장고, 사용자 지정 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 오류 페이지를 얻으려면 무엇을 변경해야 합니까?
의 본위 에서.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'
장고 2.0 업데이트
Django 2.0에서 핸들러 보기에 대한 서명이 변경되었습니다: https://docs.djangoproject.com/en/2.0/ref/views/ #error-views
위와 같은 보기를 사용하면 핸들러 404가 실패하고 다음 메시지가 표시됩니다.
"handler404 (), 예상치 못한 키워드 논쟁 'exception' 받아"
이 경우 보기를 다음과 같이 수정합니다.
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/ #사용자 정의-오류-보기
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 오류 보기를 사용자 정의할 수도 있습니다.
기본 오류 처리기:
기본 오류 처리기 , , 및 의 설명서를 읽을 가치가 있습니다. 기본적으로 찾을 수 있는 경우 템플릿을 각각 사용합니다.404.html
,500.html
,403.html
,그리고.400.html
.
그래서 만일 당신이 원하는 것이 단지 꽤 많은 에러 페이지를 만드는 것이라면, 그냥 그 파일들을 a안에 만드세요.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
# ...
장고 3.0+ 4.0+
다음은 오류 보기를 사용자 지정하는 방법 링크입니다.
여기 보기를 렌더링하는 방법 링크가 있습니다.
에서urls.py
(프로젝트 폴더의 메인), 다음을 입력합니다.
handler404 = 'my_app_name.views.custom_page_not_found_view'
handler500 = 'my_app_name.views.custom_error_view'
handler403 = 'my_app_name.views.custom_permission_denied_view'
handler400 = 'my_app_name.views.custom_bad_request_view'
그리고 언급된 앱에서 (my_app_name
)을 투입합니다.views.py
:
def custom_page_not_found_view(request, exception):
return render(request, "errors/404.html", {})
def custom_error_view(request, exception=None):
return render(request, "errors/500.html", {})
def custom_permission_denied_view(request, exception=None):
return render(request, "errors/403.html", {})
def custom_bad_request_view(request, exception=None):
return render(request, "errors/400.html", {})
참고: errors/404.html
파일을 (앱이 아닌) 프로젝트 템플릿 폴더에 배치할 경우의 경로입니다.templates/errors/404.html
파일을 원하는 곳에 배치하고 올바른 경로를 작성해주세요.
참고 2: 페이지를 다시 로드한 후에도 이전 템플릿이 표시되는 경우 변경합니다.settings.py
DEBUG=True
, 저장하고 다시 저장합니다.False
서버를 다시 시작하고 새 파일을 수집합니다.
참조한 페이지에서 다음을(를)
뷰 내에서 Http404를 올리면 장고는 404개의 오류를 처리하는 데 전념하는 특별한 뷰를 로드합니다.루트 URLconf에서 변수 핸들러 404를 찾음으로써(루트 URLconf에서만) 찾을 수 있습니다. 핸들러 404를 다른 곳에서는 설정해도 아무런 효과가 없습니다.) 이는 일반 URLconf 콜백이 사용하는 형식과 동일한 형식인 Python 점선 구문의 문자열입니다.404 뷰 자체는 특별한 것이 없습니다.그냥 평범한 풍경일 뿐입니다.
그래서 나는 당신이 당신의 URL에 이런 것을 추가해야 한다고 생각합니다.py:
handler404 = 'views.my_404_view'
핸들러 500의 경우도 마찬가지입니다.
만약 당신이 당신의 사이트에 대한 멋진 에러 메시지가 있는 사용자 정의 페이지를 보여주는 것만 필요하다면 다음과 같이.DEBUG = False
, 그런 다음 템플릿 디렉토리에 404.html 및 500.html라는 두 개의 템플릿을 추가하고 404 또는 500을 올릴 때 이 사용자 정의 페이지를 자동으로 선택합니다.
장고에서3.x
, 인정된 대답은 효과가 없을 것입니다.render_to_response
완전히 제거되었으며 승인된 답변이 작동한 버전 이후 몇 가지 변경 사항이 추가되었습니다.
다른 답변들도 있습니다만 조금 더 명확한 답변을 드립니다.
너의 메인에서urls.py
파일:
handler404 = 'yourapp.views.handler404'
handler500 = 'yourapp.views.handler500'
인yourapp/views.py
파일:
def handler404(request, exception):
context = {}
response = render(request, "pages/errors/404.html", context=context)
response.status_code = 404
return response
def handler500(request):
context = {}
response = render(request, "pages/errors/500.html", context=context)
response.status_code = 500
return response
가져오기를 완료했는지 확인합니다.render()
인에yourapp/views.py
일:
from django.shortcuts import render
:render_to_response()
2.x
된 상태입니다3.x
.
추가 보기는 필요 없습니다.https://docs.djangoproject.com/en/3.0/ref/views/
오류 파일을 템플릿 디렉토리의 루트에 넣기만 하면 됩니다.
- 404.
- 400개.
- 403.
- 500개.
디버그가 False일 때는 오류 페이지를 사용해야 합니다.
설정.py:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
ALLOWED_HOSTS = ['localhost'] #provide your host name
그리고 그냥 당신의 것을 추가합니다.404.html
그리고.500.html
템플릿 폴더의 페이지.제거한다.404.html
그리고.500.html
.에서의 에서.
Django 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을 만들고 사이트 전체의 오류, 컨텍스트 프로세서를 처리합니다.
오류 페이지에서 django가 템플릿을 로드하는 위치를 확인합니다.경로 스택 말입니다.etemplate_dir
htmll500.html
,404.html
하면 해당 이러한 오류가 발생하면 해당 템플릿 파일이 자동으로 로드됩니다.
400이나 403 같은 다른 에러 코드에 대해서도 페이지를 추가할 수 있습니다.
한 줄로(일반 페이지 404개의 경우):
from django.shortcuts import render_to_response
from django.template import RequestContext
return render_to_response('error/404.html', {'exception': ex},
context_instance=RequestContext(request), status=404)
# views.py
def handler404(request, exception):
context = RequestContext(request)
err_code = 404
response = render_to_response('404.html', {"code":err_code}, context)
response.status_code = 404
return response
# <project_folder>.urls.py
handler404 = 'todo.views.handler404'
이것은 장고 2.0에서 작동합니다.
지정 시키십시오를 해야 합니다.404.html
templates다.
을 (으)로..../Django/mysite/templates/
.
이것에 대해서는 잘 모르겠지만, 저는 이것들이 웹사이트에 "글로벌"되어야 한다고 생각합니다.
장고 루트 urls.py 파일에서 아래 행을 추가합니다.
from django.conf.urls import (handler400, handler403, handler404, handler500)
handler400 = 'app.views.bad_request'
handler403 = 'app.views.permission_denied'
handler404 = 'app.views.page_not_found'
handler500 = 'app.views.server_error'
앱의 views.py 파일에서 각각의 기능을 만듭니다.
def server_error(request, exception=None):
# return render(request, '500.html')
return redirect('/')
으로, 의 설정을 합니다.파이 파일에 세트DEBUG = False
저는 추가로.
TEMPLATE_DIRS
settings.py
문제의 원인이 되고 있었습니다
이 답변은 C BY-SA 3.0에 따라 OP reZach에 의해 사용자 지정 500/404 오류 페이지를 생성하여 Django 질문에 대한 편집으로 게시되었습니다.
장고 > 2.2
from django.shortcuts import render_to_response, render
from django.template import RequestContext
def handler500(request, *args, **argv):
context = {}
print(request.body, '==========')
response = render(request, '500.jinja', context=context)
response.status_code = 500
return response
urls.py 에서
handler500 = 'apps.core.views.handler500'
urls.py
, 다음 코드를 입력합니다.
from django.conf.urls import (handler400, handler403, handler404, handler500)
handler404 = 'my_app.views.page_not_found_view'
그런 다음 이 코드를 views.py 에 추가합니다.
from django.shortcuts import render,get_object_or_404
def page_not_found_view(request, exception):
return render(request, '404.html', status=404)
설정하는 것을 잊지 마십시오.DEBUG = False
세트tALLOWED_HOSTS = [127.0.0.1]
노트북에서 테스트를 하는 동안.
거 할 , .404.html
파일을 템플릿에 저장합니다.에 가다settings.py
설정:
DEBUG = False
ALLOWED_HOSTS = ["*"]
기본값을 자동으로 덮어씁니다.
언급URL : https://stackoverflow.com/questions/17662928/django-creating-a-custom-500-404-error-page
'programing' 카테고리의 다른 글
Node.js: req.query[]와 req.param의 차이 (0) | 2023.09.27 |
---|---|
러스트 코드에서 C나 C++ 함수를 호출할 수 있습니까? (0) | 2023.09.27 |
mysql에 levenshtein 기능을 추가하는 방법은? (0) | 2023.09.17 |
XMLHttpRequest POST 다중부분/양식-데이터 (0) | 2023.09.17 |
"MariaDB는 Microsoft SQL 및 Oracle을 MariaDB로 마이그레이션하기 위해 많은 클라이언트와 협력한다"는 다음과 같습니다. (0) | 2023.09.17 |