当调试关闭时,启用 Django 语言环境的应用程序总是返回 404

Posted

技术标签:

【中文标题】当调试关闭时,启用 Django 语言环境的应用程序总是返回 404【英文标题】:Django locale enabled app always returns 404 when debug is off 【发布时间】:2013-05-09 19:10:55 【问题描述】:

我一直在开发一个应用程序,它使用 i18n/locale 作为根/登陆页面中的 url 前缀。我尝试使用 DEBUG=True 较早地部署我的应用程序以进行测试,并且一切正常。如果尝试访问 domain.com,它将重定向到 domain.com/en/

现在,由于我禁用了 DEBUG=False,它不会重定向到 /en/,而是会显示 404 错误。

看到了这个问题,和我的场景很接近

Django 1.4 LocaleMiddleware not working with Apache, but works with runserver

但是,就我而言,我已经有了 404 页面设置及其处理程序和 404.html 文件。

下面是我的代码

settings.py

LANGUAGE_CODE = 'en-us'
ADMIN_LANGUAGE_CODE = LANGUAGE_CODE

gettext = lambda s: s

LANGUAGES = (
    ('ar', gettext('Arabic')),
    ('en', gettext('English')),
)

USE_I18N = True

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'apps.accounts.middleware.AccountSocialAuthExceptionMiddleware',
    'apps.core.middleware.DefaultSiteMiddleware',
    #    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (

    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.request",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
    # custom context processors
    "snowflake.apps.core.context_processors.project_name",
    "snowflake.apps.core.context_processors.sites",


)

这是我的网址

from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib.staticfiles.urls import staticfiles_urlpatterns


urlpatterns = patterns('',
                       url(r'^admin/', include('apps.mod.urls')),
                       url(r'^redirect/login/$', 'apps.core.views.redirect_to_accounts', name='login-redirect'),
)

urlpatterns += i18n_patterns('',

                             url(r'^$', 'apps.publication.views.index', name='home'),

                             url(r'^publication(s)?/', include('apps.publication.urls')),

                             url(r'^comment(s)?/', include('apps.comment.urls')),

                             url(r'^rating(s)?/', include('apps.rating.urls')),

                             url(r'^tag(s)?/', include('apps.taggable.urls')),

                             url(r'^search/', include('apps.search.urls')),

                             url(r'^guard(s)?/', include('apps.guard.urls')),
)

handler404 = 'apps.core.views.handler404'

附言我使用的是 django 1.5

【问题讨论】:

您对handler404 的看法是什么? 会不会是this problem? 【参考方案1】:

您的视图 apps.core.view.handler404 返回一个 HttpResponse 对象...但其 HTTP 状态代码为 200。

response = render_to_response("...")
response.status_code = 404
return response

应该可以解决你的问题(以前有过)。

【讨论】:

以上是关于当调试关闭时,启用 Django 语言环境的应用程序总是返回 404的主要内容,如果未能解决你的问题,请参考以下文章

django服务器关闭时运行进程

Qt - 启用 Qml 调试。仅在安全的环境中使用

Django基本配置

关闭VS2017中,启用浏览器中的JavaScript调试功能

关闭VS2017中,启用浏览器中的JavaScript调试功能

Django:Whitenoise 在调试错误的情况下无法在生产中工作