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

Flask Babel切换语言后如何重定向至当前页面?

解决Flask Babel切换语言后重定向到当前页面的问题

这个问题在多语言网站开发里很常见,核心就是要把当前页面的路径传递给语言切换路由,这样切换完成后就能回到原来的页面,而不是默认跳转到首页。我来帮你一步步修改代码:

1. 修改模板中的语言切换链接

原来的硬编码链接没有传递当前页面信息,我们需要用Flask的url_for生成链接,并带上next参数(值为当前页面的路径)。把你index.html里的按钮代码改成这样:

<a class="dropdown-item" href="{{ url_for('set_language', language='en', next=request.path) }}">English</a>
<a class="dropdown-item" href="{{ url_for('set_language', language='ro', next=request.path) }}">Romanian</a>

这里request.path会自动获取当前页面的路径(比如联系页就是/contact),作为参数传给语言切换路由。

2. 修改语言切换路由逻辑

接下来要修改app.py里的set_language函数,让它接收next参数,并且安全地重定向到这个路径(要防止开放重定向漏洞,不能随便跳转到外部网站)。

首先需要导入werkzeug.utils里的工具函数,然后修改路由:

from werkzeug.utils import redirect, url_parse
from flask import request, session, url_for

# 保留你原来的LANGUAGES定义、其他路由和babel配置...

@app.route('/language/<language>')
def set_language(language=None):
    # 将选中的语言存入session
    session['language'] = language
    # 获取传递过来的next参数,默认值设为首页
    next_page = request.args.get('next')
    
    # 安全校验:确保next是当前网站的内部路径,防止跳转到外部恶意网站
    if not next_page or url_parse(next_page).netloc != '':
        next_page = url_for('home')
    
    # 重定向到目标页面
    return redirect(next_page)

原理说明

当你在联系页点击语言按钮时,next参数会被设置为/contact,路由处理完语言切换后,就会重定向回/contact页面,同时语言翻译也会生效。如果next参数不合法(比如是空或者指向外部网站),就会默认跳转到首页,保证安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:32:38