2014-01-09 33 views
5

定義在我的項目NameError:名字 '應用' 不與瓶

\ myapp 
    \ app 
     __init__.py 
     views.py 
    run.py 

我有以下結構以下代碼:

run.py

from app import create_app 

if __name__ == '__main__': 
    app = create_app() 
    app.run(debug=True, host='0.0.0.0', port=5001) 

views.py

@app.route("/") 
def index(): 
    return "Hello World!" 

_ 初始化 _.py

from flask import Flask 


def create_app(): 
    app = Flask(__name__) 
    from app import views 
    return app 

我試圖使用factory design pattern與不同config創建我app對象每一次文件,並與一個子調度員能夠根據用戶請求上的subdomain創建和路由不同的對象。

我正在關注的瓶文檔,他們談,這一切:

,但我不能使其工作,似乎與我的實際項目structure有沒有辦法通過扔app反對我views.py扔給和NameError

NameError: name 'app' is not defined

+0

對不起,我只是重新改寫所有的問題,使之易於閱讀和更多的精力放在錯誤。 – ZoT

+2

你所看到的是,應用程序不是在全局範圍內創建的,所以你可以執行'app.route'。當您使用應用程序工廠時,您將視圖函數放在藍圖中以避免此問題。 – Miguel

+0

謝謝米格爾!你的建議對我有用;)我肯定會購買你的書男人!乾杯 – ZoT

回答

3

後做什麼米格爾建議(使用Blueprint)一切正常,這是最後的代碼,工作:

_ init.py _

... 

def create_app(cfg=None): 
    app = Flask(__name__) 
    from api.views import api 
    app.register_blueprint(api) 
    return app 

v iews.py

from flask import current_app, Blueprint, jsonify 
api = Blueprint('api', __name__) 

@api.route("/") 
def index(): 
    # We can use "current_app" to have access to our "app" object 
    return "Hello World!"