장고 블로그 앱: 게시글 상세 페이지

소요 시간: 5분

Django로 블로그 게시글의 상세 페이지를 만드는 과정을 단계별로 설명한다. 이 튜토리얼에서는 모델 정의, 뷰 구현, 그리고 템플릿 작성을 통해 게시글의 상세 페이지를 만든다. 추가적으로, 게시글 공개 여부를 확인하고 특별한 메시지를 표시하는 기능도 구현할 것이다.


1. 모델 정의 (Model Definition)

첫 번째로 데이터베이스 모델을 정의한다. Django에서는 모델을 사용해 데이터베이스 구조를 쉽게 설계할 수 있다. 이번 예제에서는 Article 모델을 만들어 블로그 게시글 데이터를 관리한다.

모델 작성

models.py에서 Article 모델을 정의한다. 이 모델은 제목, 내용, 발행일, 공개 여부 필드를 포함하고 있다.

# models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)  # 게시글 제목
    content = models.TextField()  # 게시글 내용
    published_at = models.DateTimeField()  # 게시글 발행일
    is_public = models.BooleanField(default=True)  # 게시글 공개 여부

모델 정의가 끝나면, 마이그레이션을 수행하여 데이터베이스에 반영한다.

python manage.py makemigrations
python manage.py migrate


2. 뷰 정의 (View Definition)

Django에서는 views.py 파일에서 사용자의 요청을 처리하고 데이터를 템플릿에 전달한다. 이번에는 Article 모델을 활용해 상세 페이지를 표시하는 뷰를 작성한다.

DetailView 활용

Django의 DetailView는 특정 모델의 상세 데이터를 손쉽게 처리할 수 있도록 도와준다. ArticleDetailView를 작성해 Article 모델의 상세 정보를 표시하도록 한다.

# views.py
from django.views.generic.detail import DetailView
from django.http import Http404
from .models import Article

class ArticleDetailView(DetailView):
    model = Article  # 사용할 모델
    template_name = 'article_detail.html'  # 사용할 템플릿 파일

    def get_object(self, queryset=None):
        obj = super().get_object(queryset)  # 기본 객체 가져오기
        if not obj.is_public:  # 비공개된 경우
            raise Http404("비공개된 기사다.")
        return obj

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['extra_message'] = '이 기사는 특별하다.'  # 추가 메시지 전달
        return context

URL 설정

urls.py 파일에서 ArticleDetailView를 URL에 연결한다.

# urls.py
from django.urls import path
from .views import ArticleDetailView

urlpatterns = [
    path('article/<int:pk>/', ArticleDetailView.as_view(), name='article_detail'),
]

3. 템플릿 작성 (Template)

Django의 템플릿 시스템을 이용해 HTML 페이지를 작성한다. 템플릿은 사용자가 보게 될 상세 페이지를 구성한다.

templates/article_detail.html 파일을 작성한다.

<!-- templates/article_detail.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ object.title }}</title>  <!-- 게시글 제목 -->
</head>
<body>
    <h1>{{ object.title }}</h1>  <!-- 게시글 제목 -->
    <p>{{ object.content }}</p>  <!-- 게시글 내용 -->
    <p>추가 메시지: {{ extra_message }}</p>  <!-- 추가 메시지 -->
</body>
</html>


결론

Django를 사용해 블로그 게시글의 상세 페이지를 만드는 과정을 설명했다. 모델 정의, 뷰 작성, 템플릿 작성을 통해 간단한 페이지를 만들 수 있었다. 이처럼 Django를 활용하면 웹 애플리케이션의 기능을 빠르고 쉽게 구현할 수 있다.

장고 리스트