LoginSignup
0
0

Djangoで基本的なブログ機能を作る

Posted at

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.pyTEMPLATES設定にテンプレートディレクトリのパスを追加し、テンプレートファイルを適切な場所に配置することで、Djangoプロジェクトでテンプレートを正しく読み込むことができます。

テンプレートの作成

templates/blogディレクトリを作成し、post_list.htmlpost_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サイトに基本的なブログ機能を追加し、ブログ記事を更新できるようになります。

0
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
0
0