Django配置404、500页面,与配置后的 static 处理

在项目开发中难免会出现404(page not found)的情况,本身是有利于开发者开发,但是在上线后就必须关闭开发者模式,再出现的404就不能是开发者模式的了,否则让用户就看到了底层的源代码。

此时我们需要自己写404界面,当出现404的时候,让它展示我们配置的404界面即可。
假如我们写好了超级简单的404.html,并把它放在templates文件夹下

<body>
<h1>抱歉,您请求的页面不存在h1>
body>

下面我们先配置settings

DEBUG = False  # 开发环境下为True,此时我们改为False
ALLOWED_HOSTS = ['*']  # 访问地址,127.0.0.1,自己的ip,如172.21.21.21(随便写的),...

在views.py中添加404、500的处理函数

# 404
def page_not_found(request, exception):  # 注意点 ①
    return render(request, '404.html')

# 500
def page_error(request):
    return render(request, '500.html')

在全局urls.py中配置url

from django.conf.urls import url
from index.views import page_not_found, page_error  

urlpatterns = [
	...
]
handler404 = 'index.views.page_not_found'
handler500 = 'index.views.page_error'
# 书写格式 handler404 名字不可以改。值的格式:app名称.views.函数名
# 或直接 handler404 = page_not_found  这里没有引号(前提, import 导入 page_not_found  )

注意点 ① :

我当时用的是Django==2.2.1版本,刚开始并没有开文档,写法如下:

def page_not_found(request):
    return render(request, '404.html')

此时就会报错:

ERRORS:
?: (urls.E007) The custom handler404 view 'index.views.page_not_found' 
does not take the correct number of arguments (request, exception).

System check identified 1 issue (0 silenced).

错误信息已经告诉我们了,page_not_found函数缺少一个参数(request, exception),而我写的只有一个request,所以多传一个参数exception就可以了。

在配置完以上后输入一个不存在的地址看一下结果:
如 输入 127.0.0.1:8000/qqq
Django配置404、500页面,与配置后的 static 处理_第1张图片

在404、500配置好后,突然发现图片、css、js等都加载失败了,样式全乱套了。
在关闭开发者模式后会丟失静态文件,我们就需要自己配置一下了。

在settings.py中

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static').replace('\\', '/')

在url.py中加入path

from django.conf.urls import url
from apps.index.views import page_not_found, page_error
from rentingHouse.settings import STATIC_ROOT
from django.views import static

urlpatterns = 
	...
    url('^static/(?P.*)$', static.serve, {'document_root': STATIC_ROOT}, name='static'),
]

handler404 = 'index.views.page_not_found'
handler500 = 'index.views.page_error'

本节完。

你可能感兴趣的:(python3,Django)