Django:我如何本地化我的URL?

Django:我如何本地化我的URL?,django,Django,如何在Django中本地化我的URL url(u'^{0}/$'.format(_('register')), RegisterView.as_view(), name='register'), 我尝试了上面的方法,但似乎只有在我停止并启动服务器时才起作用。我猜URL是在应用程序启动时翻译的 那么,如果有办法解决这个问题呢?这比在url.py中抛出()要复杂一些。您自己已经发现了原因:当Django启动时,URL只评估一次,而不是针对每个请求。因此,你必须 a) 将所有可能的翻译放入url.p

如何在Django中本地化我的URL

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