본문 바로가기
Development Frameworks/Django

[Django] 장고 마스터하기 (Django Tutorial) - Django에서 데이터베이스 항목 렌더링하기 [10/11]

by 데이터 벌집 2024. 10. 9.
반응형

이전 포스팅에서는 Django의 마이그레이션 시스템을 통해 모델의 변경 사항을 데이터베이스에 반영하는 방법을 알아보았습니다. 이번 포스팅에서는 Django에서 데이터베이스에 저장된 데이터를 HTML 페이지에 렌더링하는 방법을 다루겠습니다. 데이터를 조회하고 이를 템플릿에 전달하여 동적인 웹 페이지를 만드는 과정은 웹 애플리케이션 개발에서 매우 중요한 부분입니다. 이번 글에서는 데이터베이스에서 데이터를 가져와 템플릿에 렌더링하는 과정을 단계별로 살펴보겠습니다.

 

[Django] 장고 마스터하기 (Django Tutorial) - Django에서 데이터베이스 항목 렌더링하기 [10/11]

 

1. 뷰에서 데이터베이스 항목 가져오기

Django의 ORM을 사용하여 데이터베이스에서 항목을 조회하고, 이를 템플릿으로 전달하는 방법을 먼저 알아보겠습니다.

 

1.1 뷰 정의

 

views.py에서 뷰를 정의할 때, 데이터베이스에서 데이터를 가져오기 위해 ORM을 사용합니다. 예를 들어, 블로그 게시글을 모두 조회하여 이를 템플릿에 전달하는 post_list 뷰를 다음과 같이 정의할 수 있습니다.

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts})
 

이 코드는 Post 모델에서 모든 게시글을 조회한 후, 이를 posts라는 이름으로 템플릿에 전달합니다.

 

2. 템플릿에서 데이터 렌더링하기

 

이제 템플릿에서 전달된 데이터를 렌더링하여 사용자에게 보여줄 수 있습니다. 데이터를 출력할 HTML 파일을 templates/blog/post_list.html에 작성해보겠습니다.

 

<!DOCTYPE html>
<html>
<head>
    <title>블로그 게시글 목록</title>
</head>
<body>
    <h1>블로그 게시글</h1>
    <ul>
        {% for post in posts %}
        <li>{{ post.title }} - {{ post.created_at }}</li>
        {% endfor %}
    </ul>
</body>
</html>

위의 템플릿에서는 for 태그를 사용하여 posts 리스트를 순회하며 각 게시글의 제목과 작성 날짜를 출력합니다. Django 템플릿 시스템을 통해 전달된 데이터를 간단히 출력할 수 있습니다.

 

3. 필터와 정렬을 사용한 데이터 렌더링

데이터를 조회할 때, 필터와 정렬을 사용하여 특정 조건에 맞는 데이터를 가져오거나 데이터를 정렬할 수 있습니다. 예를 들어, 게시글을 작성일 순으로 정렬하거나, 게시된 게시글만 출력하고 싶다면 다음과 같이 작성할 수 있습니다.

 

3.1 필터링

posts = Post.objects.filter(published=True)

 

이 코드는 게시된 게시글만 조회하여 템플릿에 전달합니다.

 

3.2 정렬

posts = Post.objects.order_by('-created_at')

 

이 코드는 게시글을 작성일 기준으로 내림차순 정렬하여 가장 최신 게시글이 먼저 출력되도록 합니다.

 

4. 개별 항목 상세 페이지 렌더링

목록 페이지에서 각 게시글을 클릭했을 때, 해당 게시글의 상세 정보를 보여주는 페이지를 구현할 수 있습니다. 이를 위해 URL 패턴과 뷰를 수정하여 각 게시글에 대한 세부 정보를 보여주는 페이지를 만들어보겠습니다.

 

4.1 URL 패턴 수정

 

blog/urls.py에 상세 페이지에 대한 URL 패턴을 추가합니다.

 

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('<int:id>/', views.post_detail, name='post_detail'),
]

 

여기서는 게시글의 id 값을 URL에 포함하여, 사용자가 특정 게시글의 상세 정보를 볼 수 있도록 설정했습니다.

 

4.2 뷰 수정

 

views.py에 개별 게시글을 조회하는 post_detail 뷰를 추가합니다.

 

from django.shortcuts import render, get_object_or_404
from .models import Post

def post_detail(request, id):
    post = get_object_or_404(Post, id=id)
    return render(request, 'blog/post_detail.html', {'post': post})

 

 

이 뷰는 전달된 id 값에 해당하는 게시글을 조회하고, 이를 post_detail.html 템플릿에 전달합니다. 만약 해당 게시글이 존재하지 않으면 404 페이지를 반환합니다.

 

4.3 템플릿 작성

 

이제 post_detail.html 파일을 작성하여 개별 게시글의 상세 정보를 출력합니다.

<!DOCTYPE html>
<html>
<head>
    <title>{{ post.title }}</title>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p>{{ post.content }}</p>
    <p>작성일: {{ post.created_at }}</p>
</body>
</html>

 

이 템플릿에서는 post 객체에 대한 데이터를 출력하여 게시글의 제목, 내용, 작성일을 보여줍니다.

결론

이번 포스팅에서는 Django의 ORM을 사용하여 데이터베이스에서 데이터를 조회하고, 이를 HTML 템플릿에 렌더링하는 방법을 배웠습니다. 데이터를 조회하고 필터링하여 필요한 정보를 사용자가 볼 수 있도록 렌더링하는 과정은 웹 애플리케이션의 핵심 기능 중 하나입니다.

다음 포스팅에서는 Django의 관리자(Admin) 패널을 통해 데이터베이스 항목을 쉽게 관리하는 방법을 다루겠습니다. Django 관리자 페이지를 사용하여 데이터를 시각적으로 관리하고, 이를 통해 웹 애플리케이션 개발을 더욱 효율적으로 진행할 수 있습니다.

반응형