url根据用户选择的语言重写

时间:2013-03-06 06:55:38

标签: django url-rewriting

我有一个要求,只有当用户选择英语时,我必须将此网址www.example.com/something/something/写入www.example.com/en/something/something/

这是针对已在django中完成的现有站点,其中url用于正常部分完成。现在,如果用户选择英语,我必须重写网址。

我以为我可以手动开始更改django模板中的所有网址,如此

{% if request.session.language == 'en' %} 
    <a href="/en/something"..>
{% else %}
    <a href="/something"..>
{% endif %}

但我被要求不这样做,因为链接的数量太多了,不能这样做。

然后我考虑尝试一个自定义中间件,在那里我可以访问process_request中的请求对象并执行return HttpResponsePermanentRedirect(redirect_url)

但似乎process_request逐个处理所有请求,包括图像和其他链接。但我想要的是第一个请求,即请求的实际网址。

所以我在中间件的构造函数中尝试了相同的操作,希望它只被调用一次,这将是第一个请求。但我遇到的问题是__init__仅接受self**args而不接受request对象,因此我无法访问那里的会话变量。

我考虑过在apache中尝试这个,但是只有当用户选择英语时我才需要进行网址重定向。

1 个答案:

答案 0 :(得分:2)

从文档中阅读internationalization in django urls patterns后,您将意识到这是一个简单的过程。

  1. 更新urls.py

    from django.conf.urls.i18n import i18n_patterns
    
    urlpatterns += i18n_patterns('',
        url(r'^something/$', 'something.view', name='something'),
        # other urls like you would normally have
    )
    
  2. 确保django.middleware.locale.LocaleMiddleware的{​​{1}}部分中有MIDDLEWARE_CLASSES

  3. 就是这样。现在,您的模式将根据用户选择的语言进行更新。