Django сохраняет выбранный язык в раскрывающемся списке после перезагрузки страницы

У меня есть форма для смены языков (пока 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?

Hybrid 07.04.2019 18:23

Я включил это в urls.py urlpatterns = [path('i18n/',include('django.conf.urls.i18n')), path('admin/', admin.site.urls), ]. Я не использовал какое-либо представление, связанное с формой изменения языка, я думаю, что многое здесь упускаю.

Gora 07.04.2019 18:45
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
3
2
595
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 07.04.2019 18:59

@Гора, нет проблем! Если это решило ваш ответ, вы можете нажать «галочку» под стрелкой вниз. Это помогает другим людям найти правильный ответ, если у них возникнет та же проблема. Удачи!

Hybrid 07.04.2019 19:01

Другие вопросы по теме