2012-11-19 14 views
12

मैं अपनी वेबसाइट के लिए कंकाल प्राप्त करने के लिए ब्लूप्रिंट के साथ फ्लास्क का उपयोग कर रहा हूं और मुझे अपने आवेदन में गहराई से कॉन्फ़िगरेशन कक्षाओं का उपयोग करने में समस्या आ रही है।क्या सर्कुलर आयात के बिना मॉड्यूल में फ्लास्क कॉन्फ़िगरेशन मान आयात करना संभव है?

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 

मैं मैं app.pyusers पैकेज के अंदर गहरे में लोड वर्ग में संग्रहीत विन्यास चर कैसे पहुँच सकते हैं?

क्या एक गोलाकार आयात from website import app (models.py के अंदर) एक स्वीकार्य समाधान है?

यदि नहीं, तो क्या मुझे कुछ आसान समाधान याद आया है?

उत्तर

17

मेरा मानना ​​है कि आप इसके लिए फ्लास्क के current_app idiom का उपयोग कर सकते हैं।

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

संबंधित मुद्दे