Flask の Blueprint で app オブジェクトが欲しくなったら
Flask でモジュール機構を実現するには Blueprint を使うが、こいつが Flask のインスタンスを持っていない。
# -*- coding: utf-8 -*- # manage.py from flask import Flask from views.admin import app as admin app = Flask(__name__) app.register_blueprint(admin) app.config['foo'] = 'bar' app.run()
# -*- coding: utf-8 -*- # views/admin.py from flask import Blueprint app = Blueprint('admin', __name__, url_prefix='/admin') @app.route('/', methods=['GET'], strict_slashes=False) def index(): """ GET /admin/index/. """ app.config['foo'] return 'GET /admin/index'
上の manage.py で設定した app.config の値を取りたいけど、Blueprint には app を取れない。
そのままじゃ取れないので、flask.current_app を使う。
# -*- coding: utf-8 -*- # views/admin.py from flask import Blueprint, current_app app = Blueprint('admin', __name__, url_prefix='/admin/') @app.route('/', methods=['GET'], strict_slashes=False) def index(): """ GET /admin/index/. """ current_app.config['foo'] return 'GET /admin/index'
Blueprints 自体が持っていてくれたらと思うけど…。
参考文献