如果您只想使用新的language 设置提供相同的模板,那么知道home_page() 视图只是一个函数会有所帮助。你可以这样称呼它:
@app.route('/lang=<language>')
def home_page_language(language):
return home_page(language)
更好的是,你可以在多个路由下注册视图,你实际上不需要这里的第二个函数;只需将/lang=<language> 注册移动到home_page() 函数:
@app.route('/')
@app.route('/lang=<language>')
def home_page(language='en'):
return render_template(f"homepage - {language}.html")
现在/ 将使用'en',而/lang=foobar 将使用language='foobar' 调用相同的函数。
如果您希望将浏览器真正重定向回/ URL(使用 30x Moved 响应),但同时保留语言设置,那么您将丢失您之前的信息存储在 URL 路径中,并且必须在其他地方记录语言偏好。大多数多语言网站通常将您的语言偏好存储在专用 cookie 中,但您也可以使用 Flask session object(这也是基于默认设置的 cookie)。
要重定向到不同的 URL,请使用 flask.redirect() function,然后将您的 cookie 附加到生成的响应对象(使用 Response.set_cookie()。
您的主页需要在同一个 cookie 中查找语言设置,它不会成为 URL 的一部分;我在这里使用了一个专用的 cookie 来存储这些信息:
from flask import redirect, request, url_for
@app.route('/')
def home_page():
language = request.cookies.get('language', 'en')
return render_template(f"homepage - {language}.html")
@app.route('/lang=<language>')
def home_page_language(language):
redirected = redirect(url_for('home_page'))
redirected.set_cookie('language', language)
return redirected
如果您要将此信息存储在会话对象中,则不必手动更新重定向响应,Flask 框架会为您透明地处理:
from flask import session, redirect, url_for
@app.route('/')
def home_page():
language = session.get('language', 'en')
return render_template(f"homepage - {language}.html")
@app.route('/lang=<language>')
def home_page_language(language):
session['language'] = language
return redirect(url_for('home_page'))