在Django中支持多语言URL的最佳方法是什么?喜欢的:
http://myenglishwebsite.com/user/foo http://mygermanwebsite.com/benutzer/foo
字符串我应该在urls.py中使用multilang吗?
(r'^%s/(?P<slug>[-w]+)/$' % _('user'), 'myapp.view.relatedaction')
型这似乎不是一个好的解决方案,我不能让它工作:))
xpcnnkqh1#
这个解决方案不起作用,因为urls.py文件在第一个用户实际可以发出任何请求之前在Django服务器中加载一次,所以它必须是用户独立的文件(任何模块级代码都应该是用户独立的,因为它只加载一次)。我的猜测是Django url resolver在请求中间的某个地方进行了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
字符串这是猜测,所以我不确定它是否会工作。
cxfofazt2#
最好的方法是对每种语言使用相同的URL。它们并不是供最终用户阅读的。你有没有想过当你的URL不能用ASCII表示时会发生什么?
mtb9vblg3#
我知道这是一个老问题,但我正在寻找类似的东西,并找到了transurlvania项目。希望对你有帮助。
watbbzwu4#
目前Django 4.2涵盖了以下内容:https://docs.djangoproject.com/en/4.2/topics/i18n/translation/#translating-url-patternsDjango自1.8或更早版本起就添加了此功能。
4条答案
按热度按时间xpcnnkqh1#
这个解决方案不起作用,因为urls.py文件在第一个用户实际可以发出任何请求之前在Django服务器中加载一次,所以它必须是用户独立的文件(任何模块级代码都应该是用户独立的,因为它只加载一次)。
我的猜测是Django url resolver在请求中间的某个地方进行了str()转换,所以你可以使用一些装饰器类:
字符串
这是猜测,所以我不确定它是否会工作。
cxfofazt2#
最好的方法是对每种语言使用相同的URL。它们并不是供最终用户阅读的。
你有没有想过当你的URL不能用ASCII表示时会发生什么?
mtb9vblg3#
我知道这是一个老问题,但我正在寻找类似的东西,并找到了transurlvania项目。希望对你有帮助。
watbbzwu4#
目前Django 4.2涵盖了以下内容:https://docs.djangoproject.com/en/4.2/topics/i18n/translation/#translating-url-patterns
Django自1.8或更早版本起就添加了此功能。