2014-11-01 52 views
2

我無法使用一個創建Flask應用程序對象並運行該模塊的模塊,以及一個實現視圖(路由和錯誤處理程序)的模塊。這些模塊包含在Python包中的而不是Flask應用程序不使用另一個模塊中定義的路線

app.py

from flask import Flask 
app = Flask('graphlog') 

import config 
import views 

if __name__ == '__main__': 
    app.run(host=config.host, port=config.port, debug=config.debug) 

views.py

from app import app 

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

config.py

host = 'localhost' 
port = 8080 
debug = True 

我總是得到Flask的默認「404未找到」頁面。但是,如果我將view.py的內容移動到app.py,它就會起作用。這裏有什麼問題?

+0

@MartijnPieters它打印我期望的模塊對象,'app.py'同一目錄下的'views.py'。 – 2014-11-01 10:24:27

+0

@MartijnPieters是的! (好吧,它打印Flask應用程序,也是正確的)。順便說一句,我只是嘗試將它移動到一個Python包('graphlog/app.py','graphlog/views.py','graphlog/config.py'和'graphlog/__init __ .py'),它可以與' python -m graphlog.app'。也許Flask中有一個bug? – 2014-11-01 10:27:16

回答

4

你有模塊的位置:

  • __main__,主腳本,你給Python的命令文件運行。
  • config,從config.py文件加載。
  • views,從views.py文件加載。
  • app,使用import app時從app.py加載。

請注意,後者是獨立從第一!初始腳本沒有被加載爲app,Python認爲它不同。您有兩個Flask對象,一個引用爲__main__.app,另一個爲app.app

創建一個單獨的文件將成爲您的腳本的主要入口點;說run.py

from app import app 
import config 

if __name__ == '__main__': 
    app.run(host=config.host, port=config.port, debug=config.debug) 

並從app.pyimport config線,以及最後兩行。

或者(但更加醜陋),在views.py中使用from __main__ import app

+0

就是這樣,沒有想到這一點。謝謝! – 2014-11-01 11:07:27

+0

我得到'module'app''沒有屬性'run'' – jul 2016-10-11 15:05:03

+0

@jul:'app'是'Flask()'實例的名稱(OP有'app = Flask('graphlog')')。相應地調整。 – 2016-10-11 15:25:09

相關問題