是否可以在没有循环导入的模块中导入烧瓶配置值?

moo*_*odh 16 python python-module circular-dependency flask

我正在使用带有蓝图的Flask来获取我的网站的骨架,我在使用我的应用程序深层配置类时遇到了问题.

这是一些虚拟代码,解释了我如何设置一切:

websiteconfig.py

class Config(object):
  pass

class ProductionConfig(Config):
  DEBUG = False

class DevelopmentConfig(Config):
  DEBUG = True
Run Code Online (Sandbox Code Playgroud)

website/__ init __.py:

# Some app code and config loading
app = Flask('website')
app.config.from_object('websiteconfig.DevelopmentConfig')

# Import some random blueprint
from website import users
app.register_blueprint(users.api)

# This works:
# print app.config['DEBUG']
Run Code Online (Sandbox Code Playgroud)

website/users/__ init __.py:

from flask import Blueprint
from website.users.models import test
api = Blueprint('users', __name__, url_prefix='/users')

# This works:
# print api.config['DEBUG']

# From models
print test()
Run Code Online (Sandbox Code Playgroud)

website/users/models.py:

# How can I reach the config variables here?
def test():
    # I want config['DEBUG'] here
Run Code Online (Sandbox Code Playgroud)

如何app.pyusers包内深处加载存储在类I中的配置变量?

from website import app(在models.py中)的循环导入是一个公认的解决方案吗?

如果没有,是否有一些我错过的简单解决方案?

Rac*_*ers 23

我相信你可以使用flask的current_app习语.

http://flask.pocoo.org/docs/api/#flask.current_app

from flask import current_app

def test():
  return current_app.config.get('some_config_value')
Run Code Online (Sandbox Code Playgroud)

  • @ceolwulf:我使配置模块也可以不用烧瓶使用,所以我只需使用config import get_config并在每次需要时调用config = get_config():) (2认同)