はじめに
Djangoのファイル内でファイルを利用したいとき
cv2.imread('相対パス')
みたいな感じで相対パスで指定したところ, herokuにデプロイした時にエラーが出てしまいました.
だけど絶対パスで指定するのもよくわからなかったので, 調べてみました.
結論
settings.pyからBASE_DIR
をimport, プロジェクトフォルダからの位置を記す.
例えば以下のようなディレクトリ構成の時,
project
├app1
├app2
├project
│ ├settings.py
│ ├urls.py
│ ︙
│
└data
└img.png
from [プロジェクト名].settings import BASE_DIR
︙
cv2.imread('BASE_DIR' + /data/img.png)
のように参照することができる.
BASE_DIRの設定
デフォルトではsettings.py内で以下のように定義されているはずです.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
ようはsettings.pyの2個上のディレクトリ, つまり一番上のプロジェクトディレクトリがBASE_DIRとして設定されています.