当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django set_language用法及代码示例


本文介绍 django.views.i18n.set_language 的用法。

声明

set_language(request)

为方便起见,Django 带有一个视图 django.views.i18n.set_language() ,它设置用户的语言偏好并重定向到给定的 URL,或者默认情况下返回上一页。

通过将以下行添加到您的 URLconf 来激活此视图:

path('i18n/', include('django.conf.urls.i18n')),

(请注意,此示例使视图在 /i18n/setlang/ 可用。)

警告

确保您没有在 i18n_patterns() 中包含上述 URL - 它本身需要独立于语言才能正常工作。

该视图预计将通过POST 方法调用,并在请求中设置language 参数。如果启用了会话支持,视图会将语言选择保存在用户的会话中。它还将语言选择保存在默认名为 django_language 的 cookie 中。 (可以通过 LANGUAGE_COOKIE_NAME 设置更改名称。)

设置语言选择后,Django 在POSTGET 数据中查找next 参数。如果找到并且 Django 认为它是一个安全的 URL(即它不指向不同的主机并使用安全方案),将执行到该 URL 的重定向。否则,Django 可能会退回到将用户从 Referer 标头重定向到 URL,或者,如果未设置,则重定向到 / ,具体取决于请求的性质:

  • 如果请求接受 HTML 内容(基于其 Accept HTTP 标头),则将始终执行回退。
  • 如果请求不接受 HTML,则仅当设置了 next 参数时才会执行回退。否则将返回 204 状态码(无内容)。

这是示例 HTML 模板代码:

{% load i18n %}

<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}">
    <select name="language">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go">
</form>

在这个例子中,Django 在redirect_to 上下文变量中查找用户将被重定向到的页面的 URL。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.views.i18n.set_language。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。