2

目前在 django-cms 2.4.2 上。遇到一个奇特的问题,在DEBUG=True的本地机器上,访问127.0.0.1/会重定向到127.0.0.1/en/。在生产服务器(virtualenvs、apache)上运行时,访问 mysite.com/ 会引发 404,但会在后面显示主页,而 mysite.com/en/ 会显示主页。一直试图找到问题的根源,但似乎无法弄清楚它是否在 url、wsgi 或设置中。

网址.py

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

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin_tools/', include('admin_tools.urls')),
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

urlpatterns += i18n_patterns('',
    url(r'^accounts/', include('allauth.urls')),
    ... apps ...
    url(r'^', include('cms.urls')),
)

# Static files
urlpatterns += staticfiles_urlpatterns()

if settings.DEBUG:
    urlpatterns = patterns('',
        (r'^' + settings.MEDIA_URL.lstrip('/'), include('appmedia.urls')),
    ) + urlpatterns
else:
    from django.conf.urls.defaults import *
    handler500 = 'error_pages.views.server_error'
    handler404 = 'error_pages.views.custom_404'
    handler403 = 'error_pages.views.permission_denied'
    handler400 = 'error_pages.views.bad_request'

我已经在设置中添加了django.middleware.locale.LocaleMiddlewarecms.middleware.language.LanguageCookieMiddleware

在我的 Apache httpd.conf 中:

NameVirtualHost *:27567

# Begin site configuration
<VirtualHost *:27567>
    WSGIScriptAlias / /path/to/wsgi.$
    ErrorLog "/path/to/log/error_path.log"
</VirtualHost>

尝试记录 django 可能遇到但仅收到的任何错误:

WARNING 2013-09-18 14:04:34,380 Not Found: /

编辑:

好像当 Debug=True 时,问题就消失了。我已将 allowed_hosts 设置设置为'localhost''domain.com'。已检查加载的中间件序列,i18n 设置为 true 等,但仍无法确定问题所在。

编辑2:

才发现问题。它位于错误页面中,其中错误页面的视图为:

从 django.shortcuts 导入渲染

def server_error(request):
    return render(request, '500.html')

很可能是 django-cms 的 url 之间的冲突。

4

0 回答 0