2016-11-20 1 views
2

フラスコで遊んでいます。私のディレクトリ構造はこうです:フラスコアプリを複数のファイルに分割する

|--------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() 

これは、しかし、今私は2つのファイル__init__.pymain.pyにこれを分割したい問題なく動作します。 main.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!" 

私はmain.pyに存在しないappモジュールは、その後、私は__init__.pyを実行しようというエラーを取得していますが。私はここで間違って何をしていますか?私はrunメソッドを置くべきですか?

+0

あなたは循環インポートを持っています...あなたは '__init__'の中でmainをインポートすることはできません。そして、あなたがルートを確立した後に、runメソッドをメインに入れてください。 –

答えて

7

使用フラスコは青写真

FILE1:

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!" 

FILE2:

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!" 

FILE3

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つのアプリケーションにマージするコードです。原則は同じです –

1

私は例を少し変更しますが、それを維持したいです単純にe。構造は次のようになります、あなたはアプリを初期化実行で

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

メインからのルートをロードし、__name__ ==「__main__」内にapp.run置くことのトリックを行います - すべてのコードは、前に実行されますので。

# 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、 、アプリインポートメイン ImportError:モジュールがありません。 – KexAri

+0

固定および更新された例。 – rebeling

関連する問題