我已经花了几个小时试图了解我错过了什么。我有项目设置文件中定义的语言。
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
('en', 'English'),
('fr', 'French'),
)
然后我在MIDDLEWARE_CLASSES中列出了LocaleMiddleware。
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
...
)
最后在我的urls.py中,我有以下内容
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
...
urlpatterns += i18n_patterns('',
url(r'^about/$', 'about.view', {'template_name': {'en':'contact_en.html', 'fr':'contact_fr.html',},}, name='about'),
)
现在链接/ en / about运行良好,但是与/ fr / about的链接失败并出现以下错误:
Using the URLconf defined in XXX.urls, Django tried these URL patterns, in this order:
...
2. ^en/
The current URL, fr/about/, didn't match any of these.
有人能帮我理解我错过了什么吗?
答案 0 :(得分:0)
最后我解决了这个问题。以上所有内容对于常规项目都是正确的。但是我忘了这样一个事实,即我编写了一个中间件,动态修补request.urlconf
字段以替换正确的URL conf。在查看LocaleMiddlware
代码后,我发现中间件使用的是settings.ROOT_URLCONF
,因此没有找到正确的urls.py
!
因此,如果有人修补urls.py
,请不要忘记修补ROOT_URLCONF