Djangoサイトにブログ機能を追加する方法について下記に記載していきます。
1. プロジェクトのセットアップ
まず、Djangoプロジェクトを作成して、必要なアプリケーションを追加します。アプリ名は「blog」とします。
django-admin startproject mysite
cd mysite
django-admin startapp blog
2. settings.py
の編集
mysite/settings.py
を開いて、INSTALLED_APPS
リストにblog
アプリを追加します。
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # ここに追加
]
3. モデルの作成
ブログ記事を保存するためのモデルをblog/models.py
に追加します。
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
4. モデルのマイグレーション
データベースにモデルを反映させます。
python manage.py makemigrations
python manage.py migrate
5. 管理画面の設定
ブログ記事を管理画面から操作できるようにするため、blog/admin.py
にモデルを登録します。
from django.contrib import admin
from .models import Post
admin.site.register(Post)
6. 管理画面の作成
管理画面で操作するために、スーパーユーザーを作成します。
python manage.py createsuperuser
そして、管理画面にアクセスできるように、mysite/urls.py
を編集します。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
7. ビューとテンプレートの作成
ブログの投稿を表示するビューとテンプレートを作成します。
ビューの作成
blog/views.py
に以下のビューを追加します。
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all().order_by('-created_at')
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = Post.objects.get(pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
URLパターンの設定
blog/urls.py
を作成し、URLパターンを設定します。
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
]
settings.py
の編集
settings.py
ファイルを開き、TEMPLATES
設定の'DIRS'
オプションにテンプレートディレクトリのパスを追加します。
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # ここにテンプレートディレクトリを追加
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
テンプレートディレクトリの作成
プロジェクトのルートディレクトリにtemplates
ディレクトリを作成し、その中にblog
ディレクトリを作成します。
cd mysite
mkdir -p templates/blog
これで、settings.py
のTEMPLATES
設定にテンプレートディレクトリのパスを追加し、テンプレートファイルを適切な場所に配置することで、Djangoプロジェクトでテンプレートを正しく読み込むことができます。
テンプレートの作成
templates/blog
ディレクトリを作成し、post_list.html
とpost_detail.html
を追加します。
post_list.html
:
<!DOCTYPE html>
<html>
<head>
<title>Blog</title>
</head>
<body>
<h1>Blog</h1>
<ul>
{% for post in posts %}
<li>
<a href="{% url 'post_detail' post.pk %}">{{ post.title }}</a>
<p>{{ post.created_at }}</p>
</li>
{% endfor %}
</ul>
</body>
</html>
post_detail.html
:
<!DOCTYPE html>
<html>
<head>
<title>{{ post.title }}</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.created_at }}</p>
<div>{{ post.content }}</div>
<a href="{% url 'post_list' %}">Back to Blog</a>
</body>
</html>
8. サーバーの起動と確認
Django開発サーバーを起動して、ブログ機能が正常に動作するか確認します。
python manage.py runserver
ブラウザでhttp://127.0.0.1:8000/admin
にアクセスし、スーパーユーザーでログインしてブログ記事を追加・編集します。追加した記事がhttp://127.0.0.1:8000/blog/
に表示されるか確認します。
これで、Djangoサイトに基本的なブログ機能を追加し、ブログ記事を更新できるようになります。