2016-05-09 4 views
0

Larger Applicationsから学ぶ。このドキュメントでは、 .pyファイルにはすべてのビュー機能(上にルート()デコレータを持つもの)をインポートする必要がありますオブジェクト自体ではなく、しかし、それが入っているモジュール "
私はこれを行うときにどうすればよいか分かりません:from . import views、それが成功しました。from views import *でもうまくいきます。なぜ `から。インポートビューはFlaskの円のインポートを解決できますか?

myapplication/ 
    runner.py 
    myflask/ 
    __init__.py 
    views.py 
    templates/ 
    static/ 
    ... 

runner.py:

from testFlask import app 
app.run() 

myflask/__ init__.py:
私はこのようなこれらのファイル整理

from flask import Flask 
app = Flask(__name__) 
from . import views # why this can work???? 

myflaskを/ views.py:

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

と私はそれを実行します:

$ cd myapplication 
$ python runner.py 

このフラスコアプリを実行するのは問題ありません。しかし、私はなぜfrom . import viewsがこれを解決できるのか知りたいです円輸入フラスコに問題がありますか?そして、なぜ医者が言う:オブジェクト自体ではなく、モジュールそれは ????私はこのように行うとき

しかし、:

#some_dir/ 
# application.py 
# views.py 

#application.py 
from flask import Flask 
app = Flask(__name__) 
import views # it doesn't work 
# from views import * # it works 
app.run() 

#views.py 
from application import app 
@app.route('/') 
def index(): 
    return 'Hello World!' 

#run it 
$ python application.py 

それは動作しません。

答えて

0

円形のインポートです。しかし、あなたのケースでは、問題の可能性のある変数(app)はインポートされたスクリプトですでに定義されているため、インポートによって、最初の "app"インスタンスがインポートされた "app"インスタンスによって上書きされます。実用的な効果はありません。

この循環的な輸入状況の詳細については、postをお読みください。

大きなフラスコのアプリケーションのパターンに従う場合は、blueprintsと​​を調べる必要があります。

+0

"モジュール(またはそのメンバー)を初めてインポートすると、モジュール内のコードは他のコードと同じように順番に実行されます; [post](http://stackoverflow.com/questions/22187279/python-circular-importing)で良いです!私は理解して、あなたに感謝します。 – zjyExcelsior

0

問題を解決するのは特定のコマンドではなく、コマンドの順序です。

トリック

は、あなたがあなたのメインのスクリプトで app変数を作成し 後にビューをインポートすることであるので、ビュースクリプトがメインスクリプトをインポートする際に変数がすでに定義されています。

app変数を宣言する上記のビューをインポートしようとすると、インポートループが発生してapp変数が見つからないため、動作しません。

+0

私はそれを解決する命令の順番を知っています、それは私の質問ではありません。私の質問は:なぜ〜から。 __init__.pyの 'views.py'を読み込みます。しかし、私がapp_flask.pyでこれを行うと、 'import views'と書いてありますが、動作しません。 – zjyExcelsior

0

あなたのプロジェクト構造は、インポートが最もうまくいく方法を定義します。ここで

は、あなたが望む、テンプレート、静的ファイルやアプリケーションに適用することができ、他の要素のコレクションを定義する青写真を使用することができ、「アプリケーションのビットより大きなタイプ」の一例です:

https://github.com/pallets/flask-website/tree/master/flask_website

種類について

+0

あなたは私の記述を注意深く見たことがないかもしれません。 – zjyExcelsior

+1

あなたは初心者だと私には見えます。私が青写真について話していたように私の答えは間違っていませんでしたが、リンクしたソースコードをチェックしていませんでした。私はあなたを助けて本当に残念です。 – Jalal

+0

まあ、おそらく "モジュール(またはそのメンバー)を初めてインポートすると、モジュール内のコードは他のコードと同じように順番に実行されます;あなたよりも良い答えです。しかし、ありがとうございます。 – zjyExcelsior

関連する問題