2014-10-24 24 views
10

मेरा एपीआई डेवलपर्स को इसकी कार्यक्षमता बढ़ाने की अनुमति देने के लिए बनाया जा रहा है। मेरी योजना "एक्सटेंशन" निर्देशिका प्रदान करके ऐसा करना है जहां वे ब्लूप्रिंट में ड्रॉप कर सकते हैं और वे गतिशील रूप से लोड हो जाएंगे। इस कोड को मैं आयात करने के लिए उपयोग कर रहा हूँ (इस tutorial से modifed)फ्लास्क ब्लूप्रिंट विशेषताएँ त्रुटि: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'नाम' त्रुटि

from flask import Flask 

import pkgutil 
import sys 

app = Flask(__name__) 

EXTENSIONS_DIR = "extensions" 
modules = pkgutil.iter_modules(path=[EXTENSIONS_DIR]) 
for loader, mod_name, ispkg in modules: 
    if mod_name not in sys.modules: 
     # It imports fine 
     loaded_mod = __import__(EXTENSIONS_DIR+"."+mod_name+"."+mod_name, fromlist=[mod_name]) 
     # It does not register 
     app.register_blueprint(loaded_mod) 

यह मेरा परियोजना की निर्देशिका लेआउट है। extensions निर्देशिका वह है जहां डेवलपर्स अपनी विस्तारित कार्यक्षमता में आते हैं।

/root 
    /extensions 
     /extension1 
      __init__.py 
      extension1.py 
     /extension2 
      __init__.py 
      extension2.py 
    simple_example.py 

समस्या यह है कि मुझे यह त्रुटि मिलती है और मुझे यकीन नहीं है कि यह मुझे क्या बता रहा है।

>python simple_example.py 
Traceback (most recent call last): 
    File "simple_example.py", line 14, in <module> 
    app.register_blueprint(loaded_mod) 
    File "C:\Python27\lib\site-packages\flask\app.py", line 62, in wrapper_func 
    return f(self, *args, **kwargs) 
    File "C:\Python27\lib\site-packages\flask\app.py", line 880, in register_blueprint 
    if blueprint.name in self.blueprints: 
AttributeError: 'module' object has no attribute 'name' 

एक सरल विस्तार इस

from flask import Blueprint 

extension1 = Blueprint('extension1', __name__) 

@extension1.route("/my_route") 
def treasure_list(): 
    return "list of objects" 

तरह लग रहा है मैं एक तरीका है कि मेरी app.register_blueprint कॉल सफल होने के लिए अनुमति देता है में AttributeError कैसे हल करते हैं?

उत्तर

15

आप मॉड्यूल पंजीकृत करने की कोशिश कर रहे हैं और इसमें Blueprint ऑब्जेक्ट नहीं है।

इसके बजाय आप Blueprint उदाहरणों को खोजने के लिए मॉड्यूल आत्मनिरीक्षण करना होगा: को छोड़कर मैं सिर्फ इतना है कि fancyness में से किसी के बिना एक बहुत ही बुनियादी खाका आयात करने के लिए कोशिश कर रहा हूँ,

if mod_name not in sys.modules: 
    loaded_mod = __import__(EXTENSIONS_DIR+"."+mod_name+"."+mod_name, fromlist=[mod_name]) 
    for obj in vars(loaded_mod).values(): 
     if isinstance(obj, Blueprint): 
      app.register_blueprint(obj) 
+1

मैं एक बहुत ही इसी तरह की त्रुटि मिल रही है । –

+1

@ डेविड क्रुक: इसका मूल रूप से मतलब है कि आप ऐसा कुछ पंजीकृत करने का प्रयास कर रहे हैं जो वास्तविक 'ब्लूप्रिंट' उदाहरण नहीं है। सुनिश्चित करें कि आप सही वस्तु में गुजरते हैं। –

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

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