You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django配置自定义404/500错误页面无法正常显示问题咨询

Django自定义404/500错误页面不生效修复方案

现有代码显性问题修复

你当前写的视图代码存在模板路径写错的低级问题,404处理函数返回的模板名是400.html,和404场景不匹配,修正后的参考代码如下:

# base/views.py
from django.shortcuts import render

def handle404(request, exception):
    # 模板路径替换为你实际存放的404页面模板,不要写错成400.html
    return render(request, '404.html', status=404)

def handle500(request):
    return render(request, '500.html', status=500)

路由侧的错误处理器配置注意:handler404、handler500必须定义在项目根目录的主urls.py中,不能写在子应用的urls.py内,配置字符串的应用名、视图名不要拼写错误,你当前写的base.views.handle404、base.views.handle500只要base是你存放视图的正确应用名即可,注意不要加多余空格。

核心不生效原因排查

90%以上的自定义错误页不生效问题,都是因为没有关闭调试模式:
Django的自定义错误处理器仅在DEBUG=False时生效,开发阶段默认DEBUG=True的状态下,永远会显示带错误栈的默认调试页面,不会加载你自定义的错误视图。
修改settings.py对应配置:

# settings.py
DEBUG = False
# DEBUG=False时必须配置ALLOWED_HOSTS,否则服务无法正常启动
ALLOWED_HOSTS = ['*']  # 生产环境请替换为实际服务的域名/IP,不要使用通配符

修改完配置后必须重启Django服务,再触发错误场景测试:输入不存在的路由验证404页面,手动抛出异常验证500页面即可。

其他常见踩坑点

  • 模板路径问题:确保404.html、500.html放在Django的模板搜索路径下,如果模板存放在子应用的templates目录下,要确认对应子应用已经添加到INSTALLED_APPS配置中,否则Django找不到模板会触发额外异常。
  • 不要给错误处理视图加登录校验、权限校验类的装饰器,否则会导致未授权用户触发错误时直接跳转到登录页,无法显示自定义错误页。
  • 中间件冲突检查:如果你自定义了全局异常处理中间件,检查中间件是否提前捕获异常返回了响应,阻断Django默认的错误处理流程,导致自定义handler不触发。
  • 测试500页面不要用不存在的路由场景(不存在的路由只会触发404),可以临时加一个测试路由验证:
# 临时测试视图,验证完成后删除即可
def test_500(request):
    raise Exception("测试500错误页")

# 主urls.py加临时路由
path('test500/', test_500)

访问该路由即可验证500页面是否正常加载。


内容的提问来源于stack exchange,提问作者Aysar S Alawwad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:54:23