启用Django区域设置的应用在调试关闭时始终返回404 [英] Django locale enabled app always returns 404 when debug is off

查看:109
本文介绍了启用Django区域设置的应用在调试关闭时始终返回404的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've been developing an app that uses i18n/locale as url prefix in the root/landing page. I tried to deploy my application earlier for testing purposes with DEBUG=True and everything was working perfectly. If attempting to access domain.com it would redirect to domain.com/en/

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

Now, since I disabled DEBUG=False, it won't redirect to /en/, instead it would show 404 error.

我看到了这个问题,与我的情况很接近

I saw this question, which is close to my scenario

Django 1.4 LocaleMiddleware无法正常工作适用于Apache,但适用于runserver

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

but, for my case, I already have the 404 page setup and its handlers and 404.html file.

下面是我的代码

settings.py

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'

P.S正在使用Django 1.5

P.S am using django 1.5

推荐答案

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

Your view apps.core.view.handler404 returns a HttpResponse object... but its HTTP status code is 200.

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

应该可以解决您的问题(以前有过).

should solve your problem (have had it before).

这篇关于启用Django区域设置的应用在调试关闭时始终返回404的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆