파이썬 Django 뷰와 템플릿: 쉽게 배우는 뷰와 템플릿 활용 방법
Django는 파이썬으로 작성된 웹 프레임워크로, 개발자들이 빠르게 웹 애플리케이션을 구축할 수 있도록 설계되었습니다. 뷰(View)와 템플릿(Template)은 Django 애플리케이션의 핵심 구성 요소로, 사용자 인터페이스와 로직을 분리하여 개발을 효율적으로 관리할 수 있습니다. 이 글에서는 Django의 뷰와 템플릿을 쉽게 배우는 방법을 설명하고, 실제 예제를 통해 활용 방법을 실습해 보겠습니다.
1. Django 뷰의 개념
Django의 뷰는 HTTP 요청을 처리하고, 적절한 응답을 반환하는 함수입니다. 뷰는 URL 패턴과 연결되어, URL에 따라 특정한 동작을 수행합니다. 예를 들어, 사용자가 특정 URL을 방문하면 뷰는 해당 URL에 대한 요청을 처리하고, 필요한 데이터를 템플릿에 전달하여 사용자에게 보여줍니다.
1.1 뷰의 기본 구조
Django의 뷰는 다음과 같은 기본 구조를 가지고 있습니다:
from django.http import HttpResponse
def my_view(request):
# 요청 처리 및 데이터 준비
data = {'message': 'Hello, World'}
# 템플릿에 데이터 전달
return render(request, 'my_template.html', data)
1.2 뷰의 종류
Django에는 여러 가지 종류의 뷰가 있습니다. 가장 기본적인 뷰는 FunctionView
이며, 함수형 뷰로 작성됩니다. 또한 ClassView
라는 클래스형 뷰도 있으며, 클래스를 상속하여 작성됩니다.
1.2.1 함수형 뷰
함수형 뷰는 가장 간단한 형태의 뷰로, 함수를 정의하여 요청을 처리합니다.
from django.http import HttpResponse
from django.shortcuts import render
def hello_world(request):
return HttpResponse('Hello, World!')
1.2.2 클래스형 뷰
클래스형 뷰는 클래스를 상속하여 작성하며, 더 많은 기능을 제공합니다.
from django.views.generic import TemplateView
class HelloWorldView(TemplateView):
template_name = 'hello_world.html'
1.3 뷰와 템플릿 연결하기
뷰는 템플릿을 통해 사용자에게 보여주는 데이터를 전달합니다. 템플릿은 HTML 파일로, 뷰에서 전달받은 데이터를 사용하여 동적으로 렌더링합니다.
1.3.1 템플릿 기본 구조
템플릿은 HTML 파일로, Django의 템플릿 언어를 사용하여 동적으로 렌더링합니다. 예를 들어, 다음과 같은 템플릿을 작성할 수 있습니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello, World!</title>
</head>
<body>
<h1>{{ message }}</h1>
</body>
</html>
1.3.2 뷰에서 템플릿 호출하기
뷰에서 템플릿을 호출하려면 render
함수를 사용합니다. render
함수는 템플릿 이름과 데이터를 전달하여 템플릿을 렌더링합니다.
from django.shortcuts import render
def hello_world(request):
data = {'message': 'Hello, World'}
return render(request, 'hello_world.html', data)
2. Django 템플릿의 활용 방법
Django의 템플릿은 HTML 파일로, Django의 템플릿 언어를 사용하여 동적으로 렌더링합니다. 템플릿은 다음과 같은 기능을 제공합니다:
2.1 변수 렌더링
템플릿에서 변수를 렌더링하려면 {{ }}
를 사용합니다. 예를 들어, 다음과 같은 템플릿을 작성할 수 있습니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello, World!</title>
</head>
<body>
<h1>{{ message }}</h1>
</body>
</html>
2.2 조건문
템플릿에서 조건문을 사용하려면 if
태그를 사용합니다. 예를 들어, 다음과 같은 템플릿을 작성할 수 있습니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello, World!</title>
</head>
<body>
{% if message %}
<h1>{{ message }}</h1>
{% else %}
<h1>No message</h1>
{% endif %}
</body>
</html>
2.3 반복문
템플릿에서 반복문을 사용하려면 for
태그를 사용합니다. 예를 들어, 다음과 같은 템플릿을 작성할 수 있습니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello, World!</title>
</head>
<body>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
2.4 필터
템플릿에서 필터를 사용하려면 |
를 사용합니다. 예를 들어, 다음과 같은 템플릿을 작성할 수 있습니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello, World!</title>
</head>
<body>
<h1>{{ message|upper }}</h1>
</body>
</html>
3. 실제 예제: 도서관 관리 시스템
도서관 관리 시스템을 구축하기 위해 Django를 사용할 수 있습니다. 도서관 관리 시스템은 책의 상태를 갱신하고, 책과 저자를 생성, 편집, 삭제할 수 있는 기능을 제공합니다.
3.1 모델 정의
도서관 관리 시스템의 모델을 정의합니다. 모델은 데이터베이스에 저장될 데이터의 구조를 정의합니다.
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
publication_date = models.DateField()
class Library(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
status = models.CharField(max_length=10)
3.2 뷰 정의
도서관 관리 시스템의 뷰를 정의합니다. 뷰는 URL 패턴과 연결되어, URL에 따라 특정한 동작을 수행합니다.
from django.shortcuts import render, get_object_or_404
from .models import Book, Library
def book_list(request):
books = Book.objects.all()
return render(request, 'book_list.html', {'books': books})
def book_detail(request, pk):
book = get_object_or_404(Book, pk=pk)
return render(request, 'book_detail.html', {'book': book})
def library_list(request):
libraries = Library.objects.all()
return render(request, 'library_list.html', {'libraries': libraries})
def library_detail(request, pk):
library = get_object_or_404(Library, pk=pk)
return render(request, 'library_detail.html', {'library': library})
3.3 템플릿 정의
도서관 관리 시스템의 템플릿을 정의합니다. 템플릿은 HTML 파일로, Django의 템플릿 언어를 사용하여 동적으로 렌더링합니다.
<!-- book_list.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Book List</title>
</head>
<body>
<h1>Book List</h1>
<ul>
{% for book in books %}
<li>{{ book.title }} ({{ book.author }})</li>
{% endfor %}
</ul>
</body>
</html>
<!-- book_detail.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Book Detail</title>
</head>
<body>
<h1>{{ book.title }} ({{ book.author }})</h1>
<p>Publication Date: {{ book.publication_date }}</p>
</body>
</html>
<!-- library_list.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Library List</title>
</head>
<body>
<h1>Library List</h1>
<ul>
{% for library in libraries %}
<li>{{ library.book.title }} ({{ library.status }})</li>
{% endfor %}
</ul>
</body>
</html>
<!-- library_detail.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Library Detail</title>
</head>
<body>
<h1>{{ library.book.title }} ({{ library.status }})</h1>
<p>Status: {{ library.status }}</p>
</body>
</html>
4. 결론
Django의 뷰와 템플릿은 웹 애플리케이션을 빠르게 구축할 수 있는 강력한 도구입니다. 뷰는 URL 패턴과 연결되어, URL에 따라 특정한 동작을 수행하며, 템플릿은 HTML 파일로, Django의 템플릿 언어를 사용하여 동적으로 렌더링합니다. 실제 예제를 통해 도서관 관리 시스템을 구축하는 방법을 설명하였으며, Django의 뷰와 템플릿을 쉽게 배우는 방법을 실습해 보았습니다. Django를 사용하여 웹 애플리케이션을 구축하는 것은 간단하고 효율적이며, 다양한 기능을 제공하는 강력한 프레임워크입니다.
'[개발] 파이썬' 카테고리의 다른 글
9.1.1. 소켓 프로그래밍 (0) | 2024.12.30 |
---|---|
8.3. REST API 만들기 (4) | 2024.12.30 |
8.2.2. Django 모델과 데이터베이스 (0) | 2024.12.30 |
8.2.1. Django 기본 설정 (0) | 2024.12.30 |
8.1. Flask (0) | 2024.12.30 |