web-dev-qa-db-ja.com

BASE DIRの絶対パスは何ですか?

Djangoの初心者はこちら。私は次の意味を理解するのに苦労しています:

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

そして

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(BASE_DIR), "static", "static"),
)

ここで何が起こっていますか?

私はそれを "file"は私たちがいるsettings.pyファイル(?)なので、BASE_Dirはそこから2つ上のフォルダーです...?つまり、manage.pyを含むものですか?

STATIC_ROOTは1つになりますか?または2つ? BASE_DIRからのディレクトリ。 STATIC_ROOT FOLDERは作成されますか?または、「静的」と呼ばれるものを作成する必要がありますか?

└── MY_PROJECT
    ├── BASE_DIR
    │   ├── MY_APP
    │   │   └── settings.py
    │   └── manage.py
    └── static

この例では上記は正しいですか?一体何なのか、STATIC_FILES_DIRSは一体どこにあるのか?

26
David Blake

BASE_DIRの場所を知りたい場合は、ターミナルに印刷して、この行をsettings.pyに追加するだけです:

print "base dir path", BASE_DIR

runserverで結果を確認します。

21
django11

BASE_DIRは、Djangoプロジェクトディレクトリです。manage.pyが配置されているディレクトリと同じディレクトリです。

30
Jon

Settings.pyがこのように構成されている場合、ファイルシステムは次のようになります。

└── MY_PROJECT
    ├── BASE_DIR
    │   ├── MY_APP
    │   │   └── settings.py
    │   └── manage.py
    └── static        -> STATIC_ROOT
        └── static    -> STATICFILES_DIRS

ただし、収集された静的と、Djangoが静的ファイルを検索しようとするディレクトリ)を混在させるため、適切な構成ではありません(これを収集するなど)。

└── MY_PROJECT
    └── BASE_DIR
        ├── my_app
        │   ├── settings.py
        │   └── static              -> STATICFILES_DIRS
        ├── manage.py
        └── deployment
            ├── collected_static    -> STATIC_ROOT
            └── media               -> MEDIA_ROOT

# settings.py
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATICFILES_DIRS = (os.path.join(
    BASE_DIR, "my_app", "static"),)
STATIC_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "deployment", "collected_static")
MEDIA_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "deployment", "media")

これで、お気に入りのWebサーバー(Apache、Nginxなど)を使用して静的ファイルとメディアファイルを簡単に展開し、「展開」ディレクトリを指定できます。

更新:

MEDIA_ROOTの推奨構成も追加し、収集された静的パスを変更しました。

18
Norman8054