我正在使用Django的LocaleMiddleware
将我正在开发的网站的一部分国际化。
这是我的项目urls.py
:
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
urlpatterns = patterns('',
url(r'^api/stuff/(?P<stuff_id>)\d+/$', ApiStuff.as_view()),
)
urlpatterns += i18n_patterns('',
url(r'^stuff/', DoStuff.as_view()),
)
问题是,当ApiStuff.as_view()
返回404响应时,LocaleMiddleware
操作请求使其重定向到/en/api/stuff/<stuff_id>
,即使/api
名称空间显然不在i18n_patterns
中(最后,它也会生成404错误,但原始响应的内容丢失)。在
以下是ApiStuff
的代码:
我使用的是django1.6.10(我知道,现在很晚了,但是我现在不能更新版本)。在
我错过什么了吗?在
这是一个旧的bug,在这里被跟踪到:
https://code.djangoproject.com/ticket/17734
404错误处理程序是Django的默认处理程序。为了翻译“找不到”的信息,它显然考虑了当前的语言。在
除非可以升级到新版本,否则可能需要定义自己的错误处理程序(包括route/url)。在
编辑:
作为一种解决方法,可以扩展LocaleMiddleware,也可以扩展CommonMiddleware。然而,404处理程序仍然可以发挥它的魔力。也许值得一试,因为它只需要几行代码。在
引用罚单:
编辑2:
作为一种替代方法,您可以不使用
i18n_patterns
,而只需通过browser/cookie/parameter检测/切换语言。我在一个项目(包括Django CMS)中这样做,在那里我一直遇到这些url的问题。本地化的Django站点使用i18nurl模式绝对不是先决条件。这只是上面的东西,但一点也不必要。没有它,本地化将很好地工作。如果您需要有关切换语言的中间件的帮助,请发表评论。在可以通过使用以下url配置来解决这个问题
相关问题 更多 >
编程相关推荐