You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Django中实现404页面时遭遇错误,寻求技术帮助

别急,我帮你一步步排查Django自定义404页面的问题,先从最容易忽略的基础配置开始检查:

排查Django自定义404页面的常见步骤

1. 确认模板文件的位置是否正确

  • 首先,你的404.html必须放在Django能找到的模板目录里:要么是项目根目录下的templates文件夹,要么是你在settings.pyTEMPLATES配置里指定的DIRS路径中。
  • 举个例子,如果你的TEMPLATESDIRS设置的是[BASE_DIR / 'templates'],那404.html要直接放在这个根templates文件夹下,别嵌套在子文件夹里(如果是放在某个app的templates目录下,要确保APP_DIRS设为True)。
  • 另外,你的head_css.html作为模板片段,要确保404.html里的{% include 'head_css.html' %}能正确找到它,要么和404.html同目录,要么在模板查找路径内。

2. 检查settings.py的关键配置

  • 重中之重:把DEBUG设为False Django在DEBUG=True时会显示自带的调试404页面,根本不会用你自定义的,这是绝大多数人踩过的坑!
  • 确认ALLOWED_HOSTS配置正确,比如ALLOWED_HOSTS = ['localhost', '127.0.0.1', '你的域名'],不然可能会直接抛出服务器错误,连404都看不到。
  • 核对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',
                ],
            },
        },
    ]
    

3. 快速测试自定义404的方法

  • 如果你不想立刻把DEBUG改成False,可以写个测试视图手动触发404:
    from django.http import Http404
    from django.shortcuts import render
    
    def test_404(request):
        raise Http404("测试自定义404页面")
    
    然后在urls.py里添加对应的路由,访问这个URL就能看到你的自定义页面是否生效。
  • 或者直接把DEBUG设为False,启动服务器后访问一个不存在的路径(比如http://localhost:8000/this-page-does-not-exist),看是否加载你的404.html

4. 排查模板语法错误

  • 先简化你的404.html,比如暂时去掉{% include 'head_css.html' %},换成纯静态的HTML内容,测试是否能正常显示。如果可以,那问题大概率出在head_css.html的语法或者引用路径上。
  • 检查两个模板文件里的Django模板标签是否正确闭合(比如{% if %}要对应{% endif %}{{ 变量 }}的格式是否正确),语法错误会导致Django无法渲染模板,从而 fallback 到默认404页面。

如果做完这些还是没解决,麻烦告诉我具体的错误表现(比如浏览器显示的内容、服务器日志里的报错信息),以及你的项目目录结构、settings.py里的TEMPLATES配置细节,这样能更精准地帮你定位问题!

内容的提问来源于stack exchange,提问作者Andrew

火山引擎 最新活动