画像 URL の計算方法は 2 つあります。
最初にあなたsettings.py
が定義しますMEDIA_ROOT
。MEDIA_ROOT
メディアが保存されるコンピューター上の絶対フォルダーを指定します。たとえば、これらの設定の場合:
MEDIA_ROOT = '/abs/path/to/media/'
フィールドがある場合
models.ImageField(upload_to='movie_posters')
画像は次の場所に保存されます。
/abs/path/to/media/movie_posters/
/abs/path/to/media/movie_posters/poster.jpg <- example
これは、メディアがハード ドライブのどこに保存されているかを扱います。
2 番目の部分は、これらのメディア ファイルの URL を計算する方法です。そのためには、で定義MEDIA_URL
しますsettings.py
。これは基本的に URL をあなたのMEDIA_ROOT
場所にマップします。したがって、あなたMEDIA_URL
が次の場合:
MEDIA_URL = 'http://localhost/media/'
movie_posters/poster.jpg
次に、絶対パスが に保存されている画像にアクセスする場合/abs/path/to/media/movie_posters/poster.jpg
、その URL は である必要がありますhttp://localhost/media/movie_posters/poster.jpg
。次のようにして URL を計算できます。
{{ MEDIA_URL }}{{ movie.poster }}
MEDIA_URL
の代わりに使用していることに注意してくださいSTATIC_URL
。それらは同じものではありません。ただし、そのような URL を計算するのはあまりうまくいきません。そのため、DjangoImageField
にFileField
は次のurl
属性があります。
{{ movie.poster.url }}
Django は、設定に応じて適切な URL を計算しますMEDIA_URL
。
ノート:
これらすべてを機能させるには、別のメディア サーバーを実行する必要があります。Django はメディア ファイルを提供しません。開発中は、静的ファイルのみを提供できます (メディア ファイルとは異なります)。したがって、開発中にメディア ファイルを提供するための 1 つの優れた方法は、Python のシンプルな Web サーバーを使用することです。そのためには、新しいターミナル (Linux および Mac の場合) またはコマンド プロンプト (Windows の場合) ウィンドウ/タブを開き、メディア フォルダーに移動します。次に、そこで次のコマンドを実行します。
python -m SimpleHTTPServer 8090
設定が次のようになっていることを確認します。
MEDIA_URL = 'http://localhost:8090/'
すると、Python がメディア ファイルを提供します。それは開発にうまく機能します。