Django appディレクトリの直下にある "fixtures"ディレクトリに配置した画像ファイルにアクセスする必要がある単体テストを書いています。 Djangoアプリの絶対パスを取得する必要があります。Djangoアプリの絶対パスを取得する方法はありますか?
Pythonモジュール(Djangoアプリを含む)には、ファイルシステム上の___file__
_ファイルの場所を示す___init__.py
_属性があります。
_import appname
pth = os.path.dirname(appname.__file__)
_
あなたがしたいことをする必要があります。
通常の状況では、os.path.absname(appname.__path__[0])
ですが、奇妙な方法でファイルをインポートしたい場合、アプリがそれを変更することは可能です。
(私は常に_settings.py
_でPROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
を実行しますが、絶対パスにする必要があるさまざまな設定を簡単にします。)
通常、これはsettings.pyファイルに追加するもので、プロジェクトルートを参照できます。
import os.path
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
このメソッドは、任意のpythonファイルのディレクトリを取得します。
そのため、受け入れられた答えは通常うまくいきます。ただし、
意図したパスは、モジュールの__file__
属性と一致しない場合があります。
Django(1.7+)は AppConfig.path
属性を提供します。これは単純な場合でもより明確であり、これらのEdgeの場合もカバーしています。
アプリケーションドキュメント AppConfigオブジェクトの取得方法を説明します。したがって、AppConfigを取得し、そこからパスを出力するには:
from Django.apps import apps
print(apps.get_app_config('your.app.name').path)
それを念頭に置いて appname.__path__
はリストです:
import appname
APP_ROOT = os.path.abspath(appname.__path__[0])
file_path = os.path.join(APP_ROOT, "some_file.txt")