2012-11-19 11 views
12

ブループラントとFlaskを使用して私のウェブサイトのスケルトンを取得しています。アプリケーションの設定クラスを使用して問題が発生しています。フラスコの設定値を循環インポートなしでモジュールにインポートすることはできますか?

ここで私はすべてのものを設定している方法について説明し、いくつかのダミーコードです:

websiteconfig.py

class Config(object): 
    pass 

class ProductionConfig(Config): 
    DEBUG = False 

class DevelopmentConfig(Config): 
    DEBUG = True 

ウェブサイト/ __ 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'] 
は、

ウェブサイト/ユーザー/ __ 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() 

ウェブサイト/ユーザー/ models.py

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

がどのように私はusersパッケージ内部の深いapp.pyにロードしたクラスに保存されている設定変数を達することができますか?

from website import app(inside models.py)のような循環インポートは、受け入れられる解決策ですか?

もしそうでない場合は、私が見逃した簡単な解決策がありますか?

答えて

17

フラスコの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') 
+0

私はこの答えを受け入れるつもりです。正確には私が望んでいたものではありませんが、リファクタリングでは実際にその仕事をしています。アプリケーションの外でapp.test_request_context()を使って作業する必要がありますが、そうする必要があります。どうもありがとう! =) – moodh

+0

@moodhあなたはどのような解決策でしたか?これも私が苦労していることです。 – Patrick

+1

@ceolwulf:設定モジュールをフラスコなしでも使えるようにしたので、設定インポートget_configから呼び出して、必要なときにconfig = get_config()を呼び出してください:) – moodh

関連する問題