2016-11-20 72 views
2

我正在玩瓶子。我的目錄結構如下所示:將Flask應用程序拆分爲多個文件

|--------flask-test 
|----------------app 
|-----------------------static 
|-----------------------templates 
|-----------------------venv 
|-----------------------__init__.py 

venv文件夾包含我的虛擬燒瓶安裝。我__init__.py是像這樣:

from flask import Flask 
app = Flask(__name__) 
@app.route("/") 
def hello(): 
    return "Hello World!" 
if __name__ == "__main__": 
    app.run() 

這工作沒有問題,但是現在,我想這分爲兩個文件__init__.pymain.pymain.py將與__init__.py位於同一個目錄中。到目前爲止,我曾嘗試:

__init__.py

from flask import Flask 

app = Flask(__name__) 
import main 

main.py

from app import app 
@app.route("/") 
    def hello(): 
     return "Hello World!" 

但是我得到的模塊appmain.py存在的錯誤,然後我嘗試運行__init__.py。我在這裏做錯了什麼?還應該在哪裏放置運行方法?

+0

你有一個循環導入...你不能在'__init__'中導入main。當你建立路由 –

回答

7

使用瓶藍圖

文件1:

from flask import Blueprint, render_template, session,abort 

app_file1 = Blueprint('app_file1',__name__) 
@app_file1.route("/hello") 
def hello(): 
    return "Hello World from app 1!" 

文件2:

from flask import Blueprint, render_template, session,abort 

app_file2 = Blueprint('app_file2',__name__) 
@app_file2.route("/world") 
def world(): 
    return "Hello World from app 2!" 

文件3

from flask import Flask 
from file1 import app_file1 
from file2 import app_file2 
main_app = Flask(__name__) 
main_app.register_blueprint(app_file1) 
main_app.register_blueprint(app_file2) 
+1

後,爲什麼file1和file2使用參數'app_classifieds',它們應該不同?文件3是'__init __。py'嗎?運行方法在哪裏? – KexAri

+0

因爲我從現有的應用程序粘貼,你是正確的。我將修復答案 –

+0

文件3可能是__init__.py或任何你想要的。它是將來自多個文件的所有應用程序合併到一個應用程序中的代碼。原理是一樣的 –

1

我修改的例子了一點,但只是想保持它儘可能簡單儘可能。結構是這樣的:

app/ 
    __init__.py # empty this time 
    main.py 
    run.py 

在運行,你初始化應用程序,從主加載路線,並把app.run到__name__ ==「__main__」的伎倆 - 因爲所有的代碼之前被執行。

# in run.py 
from flask import Flask 
app = Flask(__name__) 
from main import * 


if __name__ == '__main__': 
    print app.url_map 
    app.run(debug=True) 

在main.py中指定您的路線並從啓動應用程序之前導入。

# in main.py 
from run import app 

@app.route("/") 
def hello(): 
    return "Hello World!" 
+0

獲取錯誤文件「__init__.py」,第4行, from app import main ImportError:沒有名爲app的模塊 – KexAri

+0

已修復和更新的示例。 – rebeling

相關問題