1
0

More than 1 year has passed since last update.

Django ブログ記事に画像を表示する

Posted at

はじめに

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を用いての開発ということでわからない部分は多いですが、開発を通して学んでいければと思います。

参考

Just Python staticとmedia
DjangoBrothers BLOG

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0