Метод timezoneselector
Метод timezoneselector применяется к объекту
Babel и принимает декоратор, который оборачивает
функцию выбора часового пояса. Функция должна
возвращать строку с именем часового пояса, например
'Europe/Moscow' или 'UTC'.
Flask-Babel вызывает эту функцию при каждом запросе
перед форматированием даты и времени, чтобы
определить, в каком часовом поясе находится
пользователь.
Первым параметром декоратор принимает саму функцию
выбора часового пояса. Функция не получает
аргументов и должна вернуть строку. Если функция
вернёт None, будет использован часовой
пояс по умолчанию, заданный в конфигурации
BABEL_DEFAULT_TIMEZONE.
Синтаксис
@babel.timezoneselector
def timezone_selector():
return 'timezone_name'
Пример
Давайте создадим приложение Flask с Babel и настроим простой выбор часового пояса:
from flask import Flask, render_template
from flask_babel import Babel
app = Flask(__name__)
app.config['BABEL_DEFAULT_TIMEZONE'] = 'UTC'
babel = Babel(app)
@babel.timezoneselector
def get_timezone():
return 'Europe/Moscow'
@app.route('/')
def index():
return render_template('index.html')
Теперь создадим шаблон, который выведет текущий часовой пояс:
<p>{{ get_timezone() }}</p>
Результат выполнения кода:
Europe/Moscow
Пример
Давайте выберем часовой пояс на основе параметра URL:
from flask import Flask, render_template, request
from flask_babel import Babel
app = Flask(__name__)
app.config['BABEL_DEFAULT_TIMEZONE'] = 'UTC'
babel = Babel(app)
@babel.timezoneselector
def get_timezone():
timezone = request.args.get('timezone')
if timezone:
return timezone
return 'UTC'
@app.route('/')
def index():
return render_template('index.html')
Создадим шаблон для вывода выбранного часового пояса:
<p>{{ get_timezone() }}</p>
Результат выполнения кода для адреса
/?timezone=Asia/Tokyo:
Asia/Tokyo
Пример
Давайте используем часовой пояс из сессии пользователя:
from flask import Flask, render_template, session
from flask_babel import Babel
app = Flask(__name__)
app.secret_key = 'secret'
app.config['BABEL_DEFAULT_TIMEZONE'] = 'UTC'
babel = Babel(app)
@babel.timezoneselector
def get_timezone():
return session.get('timezone', 'UTC')
@app.route('/')
def index():
session['timezone'] = 'Europe/London'
return render_template('index.html')
Создадим шаблон для отображения часового пояса:
<p>{{ get_timezone() }}</p>
Результат выполнения кода:
Europe/London
Смотрите также
-
класс
Babel,
который управляет интернационализацией -
метод
localeselector,
который выбирает локаль пользователя -
метод
init_app,
который инициализирует Babel для приложения -
функцию
get_timezone,
которая возвращает текущий часовой пояс