當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。