【问题标题】:Django keep dropdown selected language after page reload页面重新加载后,Django保持下拉选择的语言
【发布时间】:2019-08-28 21:00:43
【问题描述】:

我有一个可以更改语言的表单(目前有 3 种语言),它可以工作,只是当页面重新加载时,内容会更改为新语言,但下拉列表中的选定选项会丢失(而是显示默认语言)。页面重新加载后如何保留所选语言?任何帮助表示赞赏

 <form action="{% url 'set_language' %}" method="POST">
            {% csrf_token %}
            <input type="hidden" id="languageSwitcher" name="selected" value="{{ redirect_to}}">
            <select name ="language" id="languageField">
              {% 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}} 
              </option>
              {% endfor %}
            </select>
          <input type="submit" id ="languageSwitcher" value="Change">
          </form>

【问题讨论】:

  • 我们可以看看你的views.py吗?
  • 我已将其包含在 urls.py urlpatterns = [ path('i18n/',include('django.conf.urls.i18n')), path('admin/', admin.site .urls),]。我没有使用与语言更改表单相关的任何视图,我想我在这里遗漏了很多。

标签: css django forms dropdown reload


【解决方案1】:

要在模板中使用LANGUAGE_CODE 变量,您必须先加载i18n

将这行代码放在 html 模板的顶部:

{% load i18n %}

另外,请确保在您的设置和上下文处理器中启用 i18n

USE_I18N = True
# ...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # ...
                'django.template.context_processors.i18n',
                # ...
            ],
        },
    },
]

【讨论】:

  • 我只是添加了 'django.template.context_processors.i18n' ,它的工作就像一个魅力。非常感谢
  • @Gora 没问题!如果这解决了您的答案,您可以按向下箭头下的“复选标记”。这有助于其他人在遇到相同问题时找到正确的答案。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多