You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django动态生成语言列表时,移动端无法正确添加active类求助

Django动态生成语言选择列表时active类不生效问题

问题现象

从settings.LANGUAGES数组动态生成语言选择列表时,移动端无法为当前语言的链接添加active类;但静态写死的语言链接代码可正常生效。

静态生效代码示例

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

动态代码无法生效示例

{% 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 %} => 这里永远返回nonactive
    {% endif %}
{% endfor %}

配置信息

中间件配置

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',
]

国际化配置

USE_I18N = True

USE_L10N = False

USE_TZ = True

TIME_ZONE = 'Europe/Zurich'

LANGUAGE_CODE = 'en-US'

问题原因及解决方法

核心问题

动态代码的判断条件里错误地将变量用{{ }}包裹:{% if LANGUAGE_CODE == '{{ lng.0 }}' %}。模板语法中,{% %}标签内部直接使用变量名即可,无需嵌套{{ }},否则实际是在比较LANGUAGE_CODE与字符串'{{ lng.0 }}',永远无法匹配,因此无法添加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 %}
    {% endif %}
{% endfor %}

额外检查点

  1. 确认自定义的TranslationMiddleware能正确设置request.LANGUAGE_CODE,且该值可传递到模板中作为LANGUAGE_CODE变量使用。
  2. 检查settings.LANGUAGES的格式是否正确,每个元素应为二元组(如('en', 'English')),确保lng.0能正确获取语言代码。

内容的提问来源于stack exchange,提问作者vladimir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:55:15