はじめに
Pythonの学習を始めようと思い、Djangoを用いてブログサイトの作ってみました。今回はその中で、ブログに画像を保存する方法を通して学習していきたいと思います。
開発環境
Python 3.8.12
Django 4.0.2
バージョンの確認方法
Pythonのバージョン確認
ターミナル.
python --version
Djangoのバージョン確認
ターミナル.
python
>>>import django
>>>django VERSION
画像を使用するための設定
mediaファイルの設定の記述を追加します。
config/settings.
MEDIA_ROOT = BASE_DIR / "media"
MEDIA_URL = "/media/"
アップロードされた画像をmediaディレクトリに保存するようにする設定です。
- mediaファイルはユーザーがアップロードしたファイルなどが保存されるディレクトリのことです。
- MEDIA_ROOTは、アップロードファイルなどを読み込む際のディレクトリの場所を記述する。
- MEDIA_URLは、mediaディレクトリのURLパスを設定する。
URLの設定をする
config/urls.py.
~
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
~
]
if settings.DEBUG:
urlpatterns += static(
settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
)
if settingsは開発環境のときのみ使用します。本番環境はDEBUG=FlaseとするためURL設定は反映されません。
モデルを編集して画像カラムを追加する
blog/models.py.
from django.db import models
class Post(models.Model):
~
image = models.ImageField(upload_to="uploads/", null=True, blank=True)
~
ImageFieldについて
- upload_to = "uploads/" は、画像ファイルのアップ先を指定します。(media/uploads/に保存されます。)
- null=Trueは、データベースの中身が空かどうか判定する。
- blank=Trueは、Djangoのフォームから空かどうかを判定する。
このままサーバーを起動するとエラーが出るので、Pillowをインストールします。
ターミナル.
pip install pillow
- Pillow(PIL)とは画像処理ライブラリで、簡単な画像処理を行うことができます。
マイグレーションを実行してimageカラムを追加する
ターミナル.
python manage.py makemigrations
python manage.py migrate
画像を表示する
list.html.
~
{% if post.image %}
<img src="{{ post.image.url }}" class="card-img-top" alt="{{ post.title }}">
{% endif %}
~
おわりに
初めてのDjangoを用いての開発ということでわからない部分は多いですが、開発を通して学んでいければと思います。