Django i18n_patterns与不同语言代码的链接不匹配

时间:2012-07-04 23:31:30

标签: django localization internationalization url-pattern

我已经花了几个小时试图了解我错过了什么。我有项目设置文件中定义的语言。

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.

有人能帮我理解我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题。以上所有内容对于常规项目都是正确的。但是我忘了这样一个事实,即我编写了一个中间件,动态修补request.urlconf字段以替换正确的URL conf。在查看LocaleMiddlware代码后,我发现中间件使用的是settings.ROOT_URLCONF,因此没有找到正确的urls.py

因此,如果有人修补urls.py,请不要忘记修补ROOT_URLCONF