django mediaについて
mediaの配信について分かっていないので、少し
調べてみることにする。
class Hoge(modelsModel): image = models.ImageField(upload_to="hoge/static/images", null=True, blank=True)
このように書くと、サーバー上のpostgresqlのテーブルでは一体どのようなデータの状態で情報が保存されるのか?
id | image -------+---------------------------------------------------------- 1 | hoge/static/images/my_image1.jpg 2 | hoge/static/images/manzana_1.jpg
こんな感じになっている。
postgresqlにはupload_toのパスとjpgファイルの組み合わせが保存されていた。
ここで仮説を立てる。 サーバーのmediaを置くディレクトリに画像を置く。そしてpostgresqlにupload_toのパスと画像の名前を保存する。これで画像を表示することができる。
この仮説は正しいか?
この仮説は正しかった。mediaファイルディレクトリに画像を置くと画像表示できることは正しい。しかしながらmediaファイルのディレクトリの構成については理解が正しくなかった。以下のような理解となった。
mediaファイルの格納先
djangoの構造が少しわかった。デプロイ環境でmediaファイルはどこに格納されるのか?当初はnginxのmediaファイル用のディレクトリだと思っていた。しかしこれは厳密には正しいと言えないことが分かった。
デプロイ時にはmediaのために以下のコマンドを入力した。
mkdir /usr/share/nginx/html/media
Imagefieldは以下のように規定した。
image = models.ImageField(upload_to="hoge/static/images", null=True, blank=True)
そしてmediaのパスは以下の通り。
/usr/share/nginx/html/media/hoge/static/images/my_image1.jpg
要するにmediaのパスは3要素で構成される。1つめはnginxのディレクトリ(/usr/share/nginx/html/media)。この次にupload_toで定めたhoge/static/imagesにつながる。そして最後にファイル名になる。