Динамическая локализация Django не работает так, как ожидается, на мобильных устройствах

У меня вопрос по поводу отображения текущего языка на мобильных устройствах, если я заполняю список языков в шаблоне динамически (получаю из массива languages из настроек)... Итак, этот код работает правильно:

<a href="#" id="language-en" class="pure-drawer-link{% if LANGUAGE_CODE == 'en' %} active{% endif %}"> EN </a>

НО, когда я пробую этот код, я не могу добиться того, что active класс добавлен к текущему языку:

{% for lng in settings.LANGUAGES %}
                                    {% if not lng.0 == "ru" %}
                                        <a href="#" id="language-{{ lng.0 }}"
                                           class="pure-drawer-link{% if LANGUAGE_CODE == '{{ lng.0 }}' %} active{% endif %}">
                                            {{ lng.0|upper }}
                                        </a>
                                        {% if LANGUAGE_CODE == '{{ lng.0 }}' %} active {% else %} nonactive{% endif %} => this always return nonactive
                                    {% endif %}
                                {% endfor %}

Может ли кто-нибудь помочь понять, почему это происходит?

РЕДАКТИРОВАТЬ 1:

Мои мидлвары в настройках:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'my_app.middleware.ExpirationMiddleware',
    'my_app.middleware.IPMiddleware',
    'my_app.middleware.TranslationMiddleware',
   ]

и это для i18:

USE_I18N = True

USE_L10N = False

USE_TZ = True

TIME_ZONE = 'Europe/Zurich'

LANGUAGE_CODE = 'en-US'
  1. Убедитесь, что вы настроили промежуточное ПО и параметры Django правильно. Для того чтобы динамическая локализация работала, вам необходимо чтобы промежуточное ПО Django было установлено и настроено правильно. Этот включает LocaleMiddleware, который отвечает за установку языка на основе предпочтений пользователя. Кроме того, вам необходимо чтобы настройки USE_I18N и USE_L10N были включены в вашем Django settings file.

  2. Проверьте заголовки и настройки вашего мобильного устройства. Некоторые мобильные
    устройства, особенно старые, могут не отправлять правильные заголовки или настройки для работы динамической локализации. В частности, вам может понадобиться проверить заголовок Accept-Language, который используется Django для определения предпочтительного языка пользователя. Если этот заголовок установлен неправильно, динамическая локализация может работать не так, как как ожидалось.

  3. Протестируйте на различных мобильных устройствах и браузерах. Возможно, что
    проблема, с которой вы столкнулись, характерна для конкретного мобильного
    устройства или браузера. Чтобы исключить эту возможность, попробуйте протестировать ваше
    Django на различных мобильных устройствах и браузерах, чтобы узнать, сохраняется ли проблема. сохраняется ли проблема.

  4. Проверьте, нет ли конфликтов или проблем с другим промежуточным ПО или настройками. В некоторых случаях динамическая локализация может работать не так, как ожидается, если есть
    конфликты или проблемы с другим промежуточным ПО или настройками в вашем
    приложении Django. приложении Django. Например, если у вас есть несколько классов промежуточного ПО. которые манипулируют заголовком Accept-Language, это может вызвать конфликты и привести к тому, что динамическая локализация не будет работать должным образом. Стоит проверить все потенциальные конфликты или проблемы, которые могут влиять на динамическую локализацию в вашем приложении.

Похоже, что вы пытаетесь сравнить значение LANGUAGE_CODE со строкой. В языке шаблонов Django вы не можете сравнивать значения подобным образом. Вместо этого вам нужно использовать тег шаблона compare. Вот как вы можете изменить свой код, чтобы сравнение работало:

{% for lng in settings.LANGUAGES %}
{% if not lng.0 == "ru" %}
<a href="#" id="language-{{ lng.0 }}"
     class="pure-drawer-link{% if LANGUAGE_CODE == lng.0 %} active{% endif %}">
{{ lng.0|upper }}
</a>
{% endif %}
{% endfor %}

Альтернативно, вы можете использовать фильтр equalto, который предоставляется фреймворком Django, чтобы сравнить значения двух переменных, вот так:

{% for lng in settings.LANGUAGES %}
{% if not lng.0 == "ru" %}
<a href="#" id="language-{{ lng.0 }}"
     class="pure-drawer-link{% if LANGUAGE_CODE|equalto:lng.0 %} active{% endif %}">
{{ lng.0|upper }}
</a>
{% endif %}
{% endfor %}
Вернуться на верх