django重定义错误页
django 中定义错误页:
之前我的一篇:nginx+wsgi+django中介绍过错误页,在生产环境中,我们需要定义错误页,以便更友好的和客户端交换。
当项目默认出现404,500的错误的时候,django会自动找该项目的模板的顶级目录中的:404.html和500.html
1 Customizing error views¶ 2 3 The default error views in Django should suffice for most Web applications, but can easily be overridden if you need any custom behavior. Simply specify the handlers as seen below in your URLconf (setting them anywhere else will have no effect). 4 5 The page_not_found() view is overridden by handler404: 6 7 handler404 = 'mysite.views.my_custom_page_not_found_view' 8 9 The server_error() view is overridden by handler500: 10 11 handler500 = 'mysite.views.my_custom_error_view' 12 13 The permission_denied() view is overridden by handler403: 14 15 handler403 = 'mysite.views.my_custom_permission_denied_view' 16 17 The bad_request() view is overridden by handler400: 18 19 handler400 = 'mysite.views.my_custom_bad_request_view'
如上官网介绍的自定义错误页,其中需要注意的是:Simply specify the handlers as seen below in your URLconf (setting them anywhere else will have no effect).
如上的配置只能配置在url.conf里,配置到其他地方将无效。
举个例子:
url.conf:
1 from django.conf.urls import url,handler404,handler500 2 from django.contrib import admin 3 from error_pagr.views import * 4 handler404 = 'error_pagr.views.page_not_found'#对404和500错误重新定义。 5 handler500 = 'error_pagr.views.serv_not_found' 6 urlpatterns = [ 7 url(r'^admin/', admin.site.urls), 8 url(r'^id/', Book_Query.as_view()), 9 10 ]
view.py:
1 from django.shortcuts import render,HttpResponse 2 from django.http import Http404 3 from error_pagr import models 4 from django.views.generic import ListView 5 # Create your views here. 6 class Book_Query(ListView): 7 def get(self, request, *args, **kwargs): 8 id=request.GET.get('id',None) 9 print(id) 10 try: 11 book_obj=models.ABook.objects.filter(id=int(id)).first() 12 print(book_obj) 13 except Exception as e: 14 request.error_msg=e 15 # raise Http404("NOT") 16 return render(request,'ok.html',{'book_obj':book_obj}) 17 18 19 20 21 def page_not_found(request): 22 return render(request,'404.html') 23 24 def serv_not_found(request): 25 return render(request, 'error/500.html')
model.py:
1 from django.db import models 2 3 # Create your models here. 4 class Book(models.Model): 5 name=models.CharField(max_length=32)
因为model中不存在ABook所以访问:http://127.0.0.1:8000/id/?id=222时候会报500错误;
由于我们不在debug模式,还有500的错误页不在template顶级目录下,所以访问的是我们的500错误页,error/500.html
注意:
这样定义的好处:
1、我们可以不在template下面直接放错误页,我们可以归类如上error下的错误页。这样目录更合理。
2、覆盖默认的配置,需要在url.py里重写:
handler500、handler403、handler403直接重新赋值,我们的app.view.func形式,这样就可以重新定义我们的错误页~!覆盖django默认的配置!
学习是一种态度,坚持是质变的利器!

浙公网安备 33010602011771号