У меня есть форма для смены языков (пока 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>
Я включил это в urls.py urlpatterns = [path('i18n/',include('django.conf.urls.i18n')), path('admin/', admin.site.urls), ]. Я не использовал какое-либо представление, связанное с формой изменения языка, я думаю, что многое здесь упускаю.
Чтобы использовать переменную 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', и он работает как шарм. Большое спасибо
@Гора, нет проблем! Если это решило ваш ответ, вы можете нажать «галочку» под стрелкой вниз. Это помогает другим людям найти правильный ответ, если у них возникнет та же проблема. Удачи!
Можем ли мы увидеть ваш views.py?