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

Django 3设置DEBUG=False生产环境报500且根路径访问异常

问题原因与解决方案

1. 根路径访问返回404的原因

你所有的前端业务路由都放在了i18n_patterns中,Django的多语言路由规则要求这部分路由必须带上语言前缀(比如/en/、/bg/)才能匹配,不带前缀的根路径/不在路由匹配范围内,因此触发404错误。

对应解决方案

二选一即可:

  • 配置自动重定向:确保settings.py中MIDDLEWARE列表里已添加django.middleware.locale.LocaleMiddleware,且顺序放在django.middleware.common.CommonMiddleware之后,同时设置USE_I18N = True以及默认语言LANGUAGE_CODE = 'en',访问根路径时会自动跳转到默认语言对应的路径。
  • 手动添加根路径路由:在非i18n前缀的urlpatterns中新增重定向规则:
url(r'^$', RedirectView.as_view(url=f'/{settings.LANGUAGE_CODE}/', permanent=True)),

2. 404模板继承base.html触发500错误的原因

你的base.html中大量使用了Wagtail专属的上下文变量self(比如self.seo_title、self.get_site等),这个变量只有在渲染Wagtail正式页面的时候才会被注入到模板上下文。而Django默认渲染404错误页时,不会携带Wagtail的页面对象上下文,因此模板找不到self变量。
DEBUG=True模式下Django会默认忽略不存在的模板变量,不会报错;但DEBUG=False时,不存在的模板变量会直接抛出异常,最终把原本的404响应变成500错误。你移除继承后404模板没有用到self变量,因此运行正常。

对应解决方案

二选一即可:

  • 改造base.html的变量引用:对所有用到self的地方增加存在性判断,不存在时用默认值兜底:
{% block title %}
    {% if self %}
        {% if self.seo_title %}
            {{ self.seo_title }}
        {% elif self.translated_title %}
            {{ self.translated_title }}
        {% else %}
            {{ self.title }}
        {% endif %}
    {% else %}
        你的站点默认名称
    {% endif %}
{% endblock %}
{% block title_suffix %}
    {% if self %}
        {% with self.get_site.site_name as site_name %}
            {% if site_name %}- {{ site_name }}{% endif %}
        {% endwith %}
    {% else %}
        - 你的站点默认名称
    {% endif %}
{% endblock %}
  • 404模板覆盖父模板的相关块:在404.html中直接重写title相关块,避免调用父模板中用到self的逻辑:
{% extends "base.html" %}

{% block title %}页面未找到{% endblock %}
{% block title_suffix %} - 你的站点名称{% endblock %}

{% block body_class %}template-404{% endblock %}

{% block content %}
    <h1>Page not found</h1>
    <h2>Sorry, this page could not be found.</h2>
{% endblock %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:03