2012-11-19 15 views
12

Tôi đang sử dụng Flask với Blueprint để lấy bộ xương cho trang web của mình và tôi đang gặp sự cố khi sử dụng các lớp cấu hình sâu trong ứng dụng của mình.Có thể nhập các giá trị cấu hình bình trong các mô-đun mà không cần nhập khẩu vòng tròn không?

Dưới đây là một số mã giả giải thích làm thế nào tôi đã thiết lập mọi thứ:

websiteconfig.py

class Config(object): 
    pass 

class ProductionConfig(Config): 
    DEBUG = False 

class DevelopmentConfig(Config): 
    DEBUG = True 

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'] 

trang web/người dùng/__ 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() 

website/người dùng/models.py:

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

Làm thế nào tôi có thể đạt được các biến cấu hình lưu trữ trong lớp tôi tải trong app.py sâu bên trong gói users?

Có phải nhập khẩu vòng tròn như from website import app (bên trong models.py) một giải pháp được chấp nhận không?

Nếu không, có một số giải pháp đơn giản mà tôi đã bỏ lỡ không?

Trả lời

17

Tôi tin rằng bạn có thể sử dụng current_app idiom của bình cho điều đó.

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

Tôi sẽ chấp nhận câu trả lời này. Nó không chính xác những gì tôi muốn nhưng với một số refactoring nó thực sự làm công việc. Tôi sẽ phải làm việc với app.test_request_context() bên ngoài ứng dụng nhưng yeah, nó sẽ phải làm. Cảm ơn rất nhiều! =) – moodh

+0

@moodh bạn đã kết thúc giải pháp nào? Đây cũng là thứ tôi đang phải vật lộn. – Patrick

+1

@ceolwulf: Tôi đã tạo mô-đun cấu hình có thể sử dụng mà không cần bình cũng vì vậy tôi chỉ cần sử dụng cấu hình nhập khẩu get_config và gọi config = get_config() mỗi lần tôi cần :) – moodh

Các vấn đề liên quan