web-dev-qa-db-ja.com

os.path.dirname(os.path.abspath(__ file__))とos.path.dirname(__ file__)の違い

私はDjangoプロジェクトに取り組んでいる初心者です。 DjangoプロジェクトのSettings.pyファイルには、次の2行が含まれています。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

両方が同じディレクトリを指していると思うので、違いを知りたいです。また、os.path関数にいくつかのリンクを提供できれば、とても助かります。

14

_BASE_DIR_は、_PROJECT_ROOT_のparentディレクトリを指しています。 2つの定義を次のように書き直すことができます。

_PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(PROJECT_ROOT)
_

os.path.dirname() function はパスの最後のセグメントを単純に削除するためです。

上記の___file___名は、現在のモジュールのファイル名を指します。 Python datamodel を参照してください:

___file___は、モジュールがファイルからロードされた場合、モジュールがロードされたファイルのパス名です。

ただし、relativeパスにすることができるため、 os.path.abspath() function を使用して、ファイル名だけを削除し、モジュールが存在するディレクトリへのフルパスを_PROJECT_ROOT_に保存する前の絶対パス。

23
Martijn Pieters