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

访问带语言代码的URL时Django语言切换功能失效如何解决

问题根因

经过排查,你的配置存在3个可导致语言切换失效的问题:

  • 模板语法错误:语言切换表单的next隐藏字段属性写法错误,value后缺失等号=,导致切换语言时无法正确传递跳转路径
  • 上下文参数缺失:模板中使用的redirect_to变量需要你在渲染页面的视图中手动传入,未传值时该字段为空,切换后无法正常跳转
  • URL路径匹配风险:i18n路由未添加末尾斜杠,部分场景下会出现路径匹配失败

修复步骤

1. 修改语言切换模板代码

直接用request.path替代需要手动传递的redirect_to变量,同时修复语法错误,修改后的表单代码如下:

<form id="lang-switcher" action="{% url 'set_language' %}" method="post">{% csrf_token %}
  <input type="hidden" name="next" value="{{ request.path }}">
  <select class="language_selector" name="language" onchange="this.form.submit()">
  {% 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.code }}
  </option>
  {% endfor %}
    </select>
</form>

同时确认settings.py的模板上下文处理器中已添加django.template.context_processors.request,这样模板才能直接调用request变量:

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'django.template.context_processors.request',
                ...
            ],
        },
    },
]

2. 修复urls.py路由配置

给i18n路由添加末尾斜杠,避免路径匹配异常:

urlpatterns = [
      path('i18n/', include('django.conf.urls.i18n')),
      path('admin/', admin.site.urls),
    ]
urlpatterns += i18n_patterns(
  path('', include('base.urls')),
  prefix_default_language=True,
)

验证效果

修改完成后重启服务,直接访问带语言前缀的链接(如domain.pt/en),切换语言时会自动跳转到对应语言前缀的同路径页面,分享链接打开后也可正常切换语言。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:24:07