2017-04-21 23 views
1

我想訪問在Flask應用程序中註冊的一些擴展。我嘗試使用app.extensions,但我初始化的一些擴展名不在字典中。Flask擴展程序未在app.extensions中註冊

from flask import current_app 
current_app.extensions.get(plugin_name) 

extensions.py

from flask_sqlalchemy import SQLAlchemy 
from flask_migrate import Migrate 
from flask_mail import Mail 
from flask_debugtoolbar import DebugToolbarExtension 
from flask_images import Images 
from flask_redis import FlaskRedis 
from flask_plugins import PluginManager 

db = SQLAlchemy() 
migrate = Migrate() 
mail = Mail() 
toolbar = DebugToolbarExtension() 
images = Images() 
redis = FlaskRedis() 
plugin_manager = PluginManager() 

main.py

def configure_extensions(app): 
    db.init_app(app) 
    migrate.init_app(app, db) 
    mail.init_app(app) 
    toolbar.init_app(app) 
    images.init_app(app) 
    redis.init_app(app) 
    plugin_manager.init_app(
     app, 
     plugin_folder="app/plugins", 
     plugin_import_path='app.plugins', 
    ) 

當我看着current_app.extensions,我只看到了一些擴展。 plugin_managertoolbar不在列表中。

>>> for key in app.extensions: print(key) 
migrate 
mail 
images 
sqlalchemy 
redis 

爲什麼在app.extensions中沒有註冊一些擴展?我是否錯誤地初始化了它們?我怎樣才能得到擴展?

回答

1

擴展程序不需要將自己添加到app.extensions,它提供了一個可選的便利。顯然,這些擴展不會自己添加。如果你想要,可以考慮向相關項目提交補丁。您可以使用app.extensions來訪問擴展實例。而是導入您創建的實例,例如from myapp.extensions import db。這是能夠獨立於初始化創建它們的關鍵。當在應用上下文中使用時(例如在請求期間),對象將知道要使用的應用程序。

+0

感謝您的澄清,我會接受的答案,請你不能舉一個例子如何擴展可以添加到'app.extensions'我需要知道,以糾正舊擴展中的錯誤,我需要使用,謝謝 –

+0

例如'app.extensions ['debug_toolbar'] = toolbar'。 – davidism

+0

所以就這麼簡單,謝謝你! –