如何配置Django的settings.py,使错误时返回自定义HTML页面?
Django 配置自定义错误页面指南
要让Django在发生各类错误(如页面不存在、服务器内部错误、权限不足等)时返回自定义HTML页面,而非默认错误页,按以下步骤操作:
1. 创建自定义错误模板
在项目的templates目录下新建errors子目录(也可直接放在templates根目录),为常见错误码创建对应的HTML文件,比如404.html(页面不存在)、500.html(服务器内部错误)、403.html(权限不足)、400.html(请求错误)。这些模板可以完全自定义样式,和你的网站布局保持一致。
2. 配置settings.py
- 关闭调试模式:将
DEBUG设为False,因为DEBUG=True时Django会显示内置的调试页面,仅在生产环境(DEBUG=False)才会启用自定义错误页。DEBUG = False - 确保模板目录可被识别:检查
TEMPLATES配置里的DIRS项,确认包含存放错误模板的templates目录路径:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 路径需和实际项目结构匹配 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] - 配置允许的主机:
DEBUG=False时必须设置ALLOWED_HOSTS,否则会触发服务器错误:ALLOWED_HOSTS = ['你的域名', 'www.你的域名'] # 示例:['example.com', 'www.example.com']
3. 可选:自定义错误视图(复杂场景)
如果需要在错误页中传递额外数据、添加逻辑处理(比如记录错误日志),可以在项目根目录的urls.py中配置自定义错误视图:
方式一:直接用模板视图
from django.urls import path from django.views.generic.base import TemplateView handler404 = TemplateView.as_view(template_name='errors/404.html') handler500 = TemplateView.as_view(template_name='errors/500.html') handler403 = TemplateView.as_view(template_name='errors/403.html') handler400 = TemplateView.as_view(template_name='errors/400.html')
方式二:自定义视图函数
from django.shortcuts import render def custom_404(request, exception): # 这里可以添加额外逻辑,比如写入错误日志 return render(request, 'errors/404.html', status=404) def custom_500(request): return render(request, 'errors/500.html', status=500) handler404 = custom_404 handler500 = custom_500
测试自定义错误页
设置DEBUG=False后,访问不存在的路径即可看到404自定义页;故意在视图中抛出异常(比如raise Exception("测试错误")),即可触发500自定义页。
内容的提问来源于stack exchange,提问作者Quetions
相关产品推荐
相关产品推荐

