2

私の django アプリケーションには、projects というアプリと utils というアプリがあります。また、プロジェクト内に utils と呼ばれるモジュールを持っており、プロジェクトだけのヘルパー関数を保持しています。

したがって、私のファイル構造は次のようになります

...
projects/
    utils/
        globals.py
    views.py
utils/
    tests.py
...

utils (外側のもの) から何かをインポートしようとしたときに問題が発生し、django は projects.utils からインポートしていると認識しました。だからこれは私にエラーを与えました

# inside projects.views.py
from utils.tests import foo

projects.utils に tests.py がないため、インポートでエラーが発生しました。もちろん、私はそれを知っていて、外部のユーティリティを参照しようとしていました。

djangoで外側のutilsとprojects.utilsの両方を明確に参照する方法はありますか、それともprojects.utilsの名前を別のものに変更するだけですか?

4

1 に答える 1

4

デフォルトでimport utilsは、パッケージに直接含まれるモジュールでの呼び出しは、projects最初に相対インポートを試みて、projects.utils.

最も簡単な方法は、モジュールの先頭にある次のプラグマを介して絶対インポートを有効にすることです。

from __future__ import absolute_import

これにより、この暗黙的な相対インポート動作がオフになり (Python 3 と一致するようにもなります)、import utils常に最上位モジュールが選択されます。プラグマは、発生したファイル内のインポートにのみ影響することに注意してください。複数のモジュールで動作が必要な場合は、各ファイルにプラグマを含める必要があります。

このモードでも相対インポートを実行できますが、明示的に行う必要があります。

from . import utils
于 2012-12-04T02:39:13.320 に答える