2017-11-22 7 views
0

私は2つのコントローラを持っています。コントローラ間で関数をインポートする必要があります。web2py import controller他のコントローラ

import a 
from applications.a.modules import a 
import applications.a.modules.othermodule 

私もマニュアルを見た後に動作するように何かを得るように見えることはできません:たとえば

、私が試してみましたb.pyで、a.pyとb.pyを持っているhttp://web2py.com/book/default/chapter/04#Cooperation

1つのコントローラから別のコントローラに1つの関数をインポートするにはどうすればよいですか?

+0

/controllersフォルダまたはアプリケーションの/ modulesフォルダにa.pyがありますか? – Anthony

+0

コントローラフォルダにあります。モジュールフォルダはモデルと同じですか?私が理解していたのは、彼らがモデルに入っていて、それがグローバルな空間に似ているということでした。ファイルをコントローラフォルダに保存し、別のコントローラからアクセスする方法はありますか? –

+0

いいえ、/ modulesフォルダは/ modelsと同じではありません。/modulesフォルダは、アプリケーション固有のPythonモジュールを格納する場所です。必要に応じてそれらをインポートします。/modelsフォルダには、各HTTPリクエストで自動的にweb2py環境で実行されるPythonファイルが含まれています。 – Anthony

答えて

1

web2pyでは、コントローラはPythonモジュールのように扱われ、他のコントローラにインポートされることを意図していません。技術的にはこれを行うことができます(/controllersディレクトリに__init__.pyファイルがあることを確認してください)が、コントローラファイルはweb2py環境でHTTPリクエストごとに実行されます。コントローラから関数をインポートすると、インポートのコンテキストでは使用できないweb2py環境オブジェクト(たとえば、requestsession、オブジェクトはモデルファイルで定義されています)を参照する可能性があるため、関数を呼び出すと正しく動作しない可能性があります。

コントローラ間で機能を共有したい場合は、共有機能をPythonモジュールに移動して、それを必要とする各コントローラにインポートするほうがずっと優れています。

関連する問題