Django:我如何本地化我的URL?
如何在Django中本地化我的URLDjango:我如何本地化我的URL?,django,Django,如何在Django中本地化我的URL url(u'^{0}/$'.format(_('register')), RegisterView.as_view(), name='register'), 我尝试了上面的方法,但似乎只有在我停止并启动服务器时才起作用。我猜URL是在应用程序启动时翻译的 那么,如果有办法解决这个问题呢?这比在url.py中抛出()要复杂一些。您自己已经发现了原因:当Django启动时,URL只评估一次,而不是针对每个请求。因此,你必须 a) 将所有可能的翻译放入url.p
url(u'^{0}/$'.format(_('register')), RegisterView.as_view(), name='register'),
我尝试了上面的方法,但似乎只有在我停止并启动服务器时才起作用。我猜URL是在应用程序启动时翻译的
那么,如果有办法解决这个问题呢?这比在
url.py
中抛出(
)要复杂一些。您自己已经发现了原因:当Django启动时,URL只评估一次,而不是针对每个请求。因此,你必须
a) 将所有可能的翻译放入url.py
,或
b) 自己实现路由
A.全部在URL.py中
显然这不是一个好的解决方案,但它适用于小项目
B.实施路由
这有它自己的缺点,尤其是在使用reverse()
时。但是,它在原则上是有效的:
URL.py:
#...
url('(?<path>.+)', dispatcher),
#...
当然,您可以使查找更加智能,但随后您必须做出预先假设:
# if request.session['language'] can be trusted:
def dispatcher(request, path):
list_of_views = ['contact', 'about', 'foo']
v = None
for view in list_of_views:
if _(view) == path:
v = view
break
if v is None:
# return 404 or the home page
django 1.4中引入了URL国际化 看 这正是你要找的
def dispatcher(request, path):
if path == "hallo":
lang = "de"
elif path == "buenos_dias":
lang = "de"
else:
lang = "en"
# if request.session['language'] can be trusted:
def dispatcher(request, path):
list_of_views = ['contact', 'about', 'foo']
v = None
for view in list_of_views:
if _(view) == path:
v = view
break
if v is None:
# return 404 or the home page