只有当用户选择英文时,我才有必要在此处输入www.example.com/something/something/
至www.example.com/en/something/something/
。根据用户选择的语言进行网址重写
这是一个现有的网站已完成在Django的URL与正常的部分完成。现在,如果用户选择英文,我必须重写网址。
我以为我可以手动启动改变Django模板所有的URL像这样
{% if request.session.language == 'en' %}
<a href="/en/something"..>
{% else %}
<a href="/something"..>
{% endif %}
但我一直要求不要做这种方式的链接的数量实在是太多了做这样。
后来我想尝试一个自定义的中间件,在那里我可以访问请求对象process_request
,做return HttpResponsePermanentRedirect(redirect_url)
但似乎process_request
处理所有的请求一个接一个,包括图像等各个环节。但我想要的是第一个请求,即请求的实际url。
所以我在中间件的构造函数中尝试了相同的操作,希望它只会被调用一次,那将是第一个请求。但我面临的问题是,__init__
只接受self
和**args
而不是request
对象,所以我无法访问那里的会话变量。
我想过在apache中尝试这种方式,但只有在用户选择英文语言时,我才需要执行url重定向。
Burhan Khalid先生非常感谢你。我会立即尝试,并让你知道。再次感谢 – 2013-03-06 07:17:08
我可以问一下,这个可以在url中做“i18n_patterns”吗?这是我第一次看到,只是想学习新东西:) – catherine 2013-03-06 07:20:58
您好先生Burhan,我使用的是django 1.3,它会抛出一个导入错误,如果我从django.conf.urls.i18n导入i18n_patterns – 2013-03-06 07:26:14