set_language 重定向视图

方便起见,Django自带了一个 django.views.i18n.set_language 视图,作用是设置用户语言偏好并重定向返回到前一页面。

在URLconf中加入下面这行代码来激活这个视图:

  1. (r'^i18n/', include('django.conf.urls.i18n')),

(注意这个例子使得这个视图在 /i18n/setlang/ 中有效。)

这个视图是通过 GET 方法调用的,在请求中包含了 language 参数。 如果session已启用,这个视图会将语言选择保存在用户的session中。 否则,它会以缺省名django_language在cookie中保存这个语言选择。(这个名字可以通过LANGUAGE_COOKIE_NAME设置来改变)

保存了语言选择后,Django根据以下算法来重定向页面:

  • Django 在 POST 数据中寻找一个 下一个 参数。

  • 如果 next 参数不存在或为空,Django尝试重定向页面为HTML头部信息中 Referer 的值。

  • 如果 Referer 也是空的,即该用户的浏览器并不发送 Referer 头信息,则页面将重定向到 / (页面根目录)。

这是一个HTML模板代码的例子:

  1. <form action="/i18n/setlang/" method="post">
  2. <input name="next" type="hidden" value="/next/page/" />
  3. <select name="language">
  4. {% for lang in LANGUAGES %}
  5. <option value="{{ lang.0 }}">{{ lang.1 }}</option>
  6. {% endfor %}
  7. </select>
  8. <input type="submit" value="Go" />
  9. </form>