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 自体が持っていてくれたらと思うけど…。


参考文献