Если все, что вы хотите сделать, это обслуживать один и тот же шаблон с новой настройкой language
, тогда полезно знать, что home_page()
view - это просто функция . Вы можете просто назвать это:
@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-адрес /
(используя 30-кратный перемещенный ответ), но в то же время сохранить настройку языка, то вы потеряете сохраненную информацию в пути URL и должны записать языковые предпочтения где-то еще . Большинство многоязычных сайтов обычно хранят ваши языковые предпочтения в выделенном файле cookie, но вы также можете использовать объект Flask session
(который также является файлом cookie на основе настроек по умолчанию).
Чтобы перенаправить на другой URL-адрес, используйте функцию flask.redirect()
, затем прикрепите файл 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'))