Django中的多语言URL

时间:2010-07-22 06:51:14

标签: python django url-routing multilingual

在Django中支持多语言URL的最佳方法是什么?像:

http://myenglishwebsite.com/user/foo
http://mygermanwebsite.com/benutzer/foo

我应该在urls.py中使用multilang,如:

(r'^%s/(?P<slug>[-w]+)/$' % _('user'), 'myapp.view.relatedaction')

它似乎不是一个好的解决方案,我无法使它工作:))

3 个答案:

答案 0 :(得分:1)

此解决方案不起作用,因为在第一个用户实际可以发出任何请求之前,urls.py文件在Django服务器中加载一次,因此它必须是与用户无关的文件(任何模块级代码都应该与用户无关,因为它只加载一次。)

我的猜测是,Django url解析器会在请求中间的某处生成str(),所以你可以使用一些装饰器类:

(URLLangDecorator(r'^%s/(?P<slug>[-w]+)/$', ['user']), 'myapp.view.relatedaction')
class URLLangDecorator:
    def __init__(self, url, params):
        self.url, self.params = url, params

    def __str__(self):
        return self.url % map(_, self.params)
    # Django can also preform "%" operation, so to be safe:
    def __mod__(self, arg):
        return str(self) % arg

这是猜测,所以我不确定它是否会起作用。

答案 1 :(得分:0)

最好的方法是为每种语言使用相同的网址。无论如何,最终用户都无法阅读它们。

您是否想过当您的网址无法用ASCII表示时会发生什么?

答案 2 :(得分:0)

我知道这是一个老问题,但我正在寻找类似的东西并找到了transurlvania项目。希望它有所帮助。