아래 글은 Django 클래스 기반 뷰(CBV) 탐구 시리즈의 6편으로, TemplateView와 RedirectView를 통해 간단한 페이지 렌더링과 리디렉션 처리를 자동화하는 방법을 다룹니다. 지난 글(5편)에서 CreateView
, UpdateView
, DeleteView
로 CRUD를 구축했다면, 이번에는 좀 더 가벼운 페이지 및 리디렉션 처리를 어떻게 효율적으로 구성할 수 있는지 알아보겠습니다.
전편 바로가기는 아래의 링크를 클릭하세요!
CreateView, UpdateView, DeleteView로 CRUD 구현하기
“Django TemplateView와 RedirectView로
간단한 페이지 구조와 리디렉션을 손쉽게 자동화하세요!”
1. TemplateView & RedirectView, 왜 필요한가?
TemplateView와 RedirectView는 Django에서 가장 단순한 용도에 특화된 클래스 기반 뷰(Generic Views)입니다.
-
TemplateView
-
별다른 데이터 처리 로직 없이, 정적 페이지 혹은 간단한 컨텍스트를 템플릿에 넘겨주는 경우에 유용합니다.
-
예) “About” 페이지, “FAQ” 페이지, 404/500 등 에러 페이지(별도 설정 시) 등.
-
-
RedirectView
-
특정 URL로 즉시 이동(리디렉트) 시키는 용도로 사용합니다.
-
예) 도메인 루트(
/
) 접근 시 특정 페이지로 이동, 간단한 단축 URL 서비스, 캠페인 홍보용 리디렉트 등.
-
이 둘은 데이터베이스 조작이나 폼 검증이 필요 없는 단순한 페이지 처리에 초점을 맞춘다는 점에서, 앞서 다룬 FormView
, CreateView
등과는 성격이 다릅니다.
2. TemplateView 사용법
2.1 기본 구조
# views.py
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = 'home.html'
-
template_name
: 렌더링할 템플릿 파일 경로를 지정합니다. -
별도의
get()
메서드를 오버라이드하지 않아도, 기본적으로 GET 요청 시template_name
에 지정된 템플릿을 렌더링해줍니다.
2.2 urls.py 연결
# urls.py
from django.urls import path
from .views import HomePageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
]
- 루트 URL(
""
)로 접근 시home.html
템플릿을 보여주게 됩니다.
2.3 템플릿 예시: home.html
<!DOCTYPE html>
<html>
<head>
<title>홈페이지</title>
</head>
<body>
<h1>안녕하세요! 여기는 홈페이지입니다.</h1>
</body>
</html>
3. TemplateView에서 컨텍스트 데이터 넘기기
단순 템플릿 렌더링 외에도, 간단한 변수를 템플릿에 넘겨주고 싶을 때는 get_context_data()
메서드를 오버라이드합니다.
from django.views.generic import TemplateView
class AboutPageView(TemplateView):
template_name = 'about.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = 'About Us'
context['description'] = '이 사이트는 Django CBV를 소개하기 위한 예시입니다.'
return context
그럼 템플릿에서 page_title
, description
변수를 사용할 수 있습니다:
<!-- about.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ page_title }}</title>
</head>
<body>
<h1>{{ page_title }}</h1>
<p>{{ description }}</p>
</body>
</html>
Tip:
TemplateView는 DB 쿼리가 필요 없는 간단한 페이지를 만들 때 특히 유용하며,
한편, 만약 여러 템플릿에서 공통 변수가 필요한 경우 Mixin이나 base template와 결합하여 사용하는 방법도 고려해 보세요.
4. RedirectView 사용법
4.1 기본 구조
# views.py
from django.views.generic import RedirectView
class BlogRedirectView(RedirectView):
pattern_name = 'blog_list' # URL name
# (선택) URL reverse 시 필요한 파라미터를 지정할 수 있음
# query_string = True # 쿼리스트링 유지 여부
# permanent = False # 영구 리디렉트 여부 (301 vs 302)
-
pattern_name
:urls.py
의 URL name(예:'blog_list'
)을 지정하면, 뷰 실행 시 그 경로로 리디렉트합니다. -
permanent=True
로 설정하면 영구 리디렉트(301)를, 기본값(False
)이면 임시 리디렉트(302)를 수행합니다. -
query_string=True
로 하면, 기존 URL의 쿼리스트링(?page=2
등)을 리디렉트 대상 URL에도 붙여줍니다.
4.2 urls.py 연결
# urls.py
from django.urls import path
from .views import BlogRedirectView, HomePageView
urlpatterns = [
path('go-to-blog/', BlogRedirectView.as_view(), name='go_to_blog'),
path('', HomePageView.as_view(), name='home'),
]
/go-to-blog/
로 접근하면,'blog_list'
로 지정된 URL 패턴으로 리디렉트됩니다.
4.3 직접 URL 지정하기
URL name이 아니라 url
속성에 절대 경로나 외부 링크를 직접 넣을 수도 있습니다.
class ExternalRedirectView(RedirectView):
url = 'https://www.djangoproject.com/'
urlpatterns = [
path('django-home/', ExternalRedirectView.as_view(), name='django_home'),
]
- 이렇게 하면
/django-home/
→https://www.djangoproject.com/
로 리디렉트됩니다.
5. TemplateView & RedirectView 사례
-
공지 페이지: 데이터베이스 연동 없이, 공지 내용이 고정된 정적 페이지를 보여주고 싶을 때
TemplateView
를 사용할 수 있습니다. -
FAQ / ‘Coming Soon’ 페이지: 제품 FAQ나 임시 점검 페이지 등을 빠르게 띄울 때도 유용합니다.
-
도메인 루트 리디렉트: “메인 페이지 접근 시 /home/으로 이동” 같은 단순 리디렉션 로직을
RedirectView
로 자동화할 수 있습니다. -
외부 서비스 링크 연결: 단축 URL처럼, 특정 경로 접속 시 외부 사이트로 보내는 경우에도 좋습니다.
6. FBV와 비교해 보기
기능 | FBV (함수 기반 뷰) | TemplateView / RedirectView (클래스 기반 뷰) |
---|---|---|
정적 페이지 렌더링 (예: FAQ) | def faq(request): return render(request, 'faq.html') 등 직접 작성 |
TemplateView: template_name 만 지정하면 페이지 자동 렌더링 |
단순 리디렉트 | return redirect('some_url') / HttpResponseRedirect(...) 사용 |
RedirectView: URL 또는 pattern_name 만 지정하면 끝 |
추가 컨텍스트 전달 | 매번 context = {...} -> render(...) 로 직접 처리 |
get_context_data()를 통해 구조적이고 일관된 방식으로 관리 가능 |
코드 구조 / 유지보수 | 짧은 페이지나 간단한 리디렉트는 FBV도 문제가 없지만, 많은 정적 페이지나 리디렉트가 늘면 중복 발생 | “필요한 설정만 속성이나 메서드로” 분리되어 있으므로 유지 보수 편리 |
개발 생산성(핵심 키워드) | “직접 render, redirect 함수 사용 -> 중복 가능성” | “시간 절약(Time-saving), 코드 일관성, 유지 보수성(Productivity boost)” |
7. 마무리 및 다음 편 예고
TemplateView와 RedirectView는 Django 프로젝트에서 가장 간단한 페이지 처리를 손쉽게 관리할 수 있도록 도와주는 클래스 기반 뷰입니다.
DB 연동이나 폼 검증 같은 복잡한 로직이 필요 없을 때, 이들을 사용하면 중복 코드를 줄이고, 프로젝트 구조를 더욱 깔끔하게 유지할 수 있죠.
이제 우리가 CBV로 “정적 페이지”, “리디렉션”, “CRUD(작성/수정/삭제)”, “리스트/상세 보기”, “폼 처리” 등
웹 개발의 필수 요소 대부분을 구현할 수 있게 되었습니다!
다음 편(시리즈 7편)에서는 Django에서 자주 쓰이는 Mixin을 활용해 공통 기능을 간단히 재사용하고, 권한 관리나 로그인 체크 등을 효율적으로 구현하는 방법을 소개할 예정입니다.
이전 글 다시 보기
- 클래스 기반 뷰(CBV) 탐구 시리즈 #1 – FBV에서 CBV로 가는 이유와 개발자의 자세
- 클래스 기반 뷰(CBV) 탐구 시리즈 #2 – Django의 기본 View 클래스 이해하기
- 클래스 기반 뷰(CBV) 탐구 시리즈 #3 – FormView로 폼 처리 쉽게 하기
- 클래스 기반 뷰(CBV) 탐구 시리즈 #4 – ListView & DetailView 활용법
- 클래스 기반 뷰(CBV) 탐구 시리즈 #5 – CreateView, UpdateView, DeleteView로 CRUD 구현하기
“TemplateView와 RedirectView로 번거로운 정적 페이지 처리와 리디렉션을 자동화하고,
프로젝트를 더욱 간결하고 생산적으로 만드세요!”
댓글이 없습니다.