私はFlaskアプリケーションを設定するためにアプリファクトリパターンを使用しています。私のアプリはFlask-Babel拡張を使用しています。これは工場でも設定されています。しかし、私はそれを使用するために青写真の内線にアクセスしたい、アプリケーションファクトリで定義されているFlask拡張機能にアクセスする
工場は__init__.py
にあります。
def create_app(object_name):
app = Flask(__name__)
app.config.from_object(object_name)
babel = Babel(app)
app.register_blueprint(main_blueprint)
app.register_blueprint(category_blueprint)
app.register_blueprint(item_blueprint)
db.init_app(app)
return app
私はmain.py
に以下を追加したい:
@babel.localeselector
def get_locale():
if 'locale' in session:
return session['locale']
return request.accept_languages.best_match(LANGUAGES.keys())
@application.route('/locale/<locale>/', methods=['GET'])
def set_locale(locale):
session['locale'] = locale
redirect_to = request.args.get('redirect_to', '/')
return redirect(redirect_to) # Change this to previous url
残念ながら、main.py
は、アプリケーションの工場からbabel
変数にアクセスすることはできません。これを解決するにはどうすればいいですか?
main.pyにset_localeを残すことをお勧めしますか? – Sparrowcide
これはあなたの責任とプロジェクトの構成方法です。どのように動作するかには影響しません。とにかくそれは答えの要点ではなく、ちょっとしたメモです。 – davidism