아래 글은 Django 클래스 기반 뷰(CBV) 탐구 시리즈의 6편으로, TemplateViewRedirectView를 통해 간단한 페이지 렌더링리디렉션 처리를 자동화하는 방법을 다룹니다. 지난 글(5편)에서 CreateView, UpdateView, DeleteView로 CRUD를 구축했다면, 이번에는 좀 더 가벼운 페이지 및 리디렉션 처리를 어떻게 효율적으로 구성할 수 있는지 알아보겠습니다.

전편 바로가기는 아래의 링크를 클릭하세요!

CreateView, UpdateView, DeleteView로 CRUD 구현하기


“Django TemplateView와 RedirectView로
간단한 페이지 구조와 리디렉션을 손쉽게 자동화하세요!”


1. TemplateView & RedirectView, 왜 필요한가?

TemplateViewRedirectView는 Django에서 가장 단순한 용도에 특화된 클래스 기반 뷰(Generic Views)입니다.

  1. TemplateView

    • 별다른 데이터 처리 로직 없이, 정적 페이지 혹은 간단한 컨텍스트를 템플릿에 넘겨주는 경우에 유용합니다.

    • 예) “About” 페이지, “FAQ” 페이지, 404/500 등 에러 페이지(별도 설정 시) 등.

  2. RedirectView

    • 특정 URL로 즉시 이동(리디렉트) 시키는 용도로 사용합니다.

    • 예) 도메인 루트(/) 접근 시 특정 페이지로 이동, 간단한 단축 URL 서비스, 캠페인 홍보용 리디렉트 등.

이 둘은 데이터베이스 조작이나 폼 검증이 필요 없는 단순한 페이지 처리에 초점을 맞춘다는 점에서, 앞서 다룬 FormView, CreateView 등과는 성격이 다릅니다.


2. TemplateView 사용법

TemplateView 흐름도 – HTML 자동 렌더링

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에서 컨텍스트 데이터 넘기기

RedirectView – 자동으로 우회전하는 스마트한 리디렉션

단순 템플릿 렌더링 외에도, 간단한 변수를 템플릿에 넘겨주고 싶을 때는 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.pyURL 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 사례

  1. 공지 페이지: 데이터베이스 연동 없이, 공지 내용이 고정된 정적 페이지를 보여주고 싶을 때 TemplateView를 사용할 수 있습니다.

  2. FAQ / ‘Coming Soon’ 페이지: 제품 FAQ나 임시 점검 페이지 등을 빠르게 띄울 때도 유용합니다.

  3. 도메인 루트 리디렉트: “메인 페이지 접근 시 /home/으로 이동” 같은 단순 리디렉션 로직을 RedirectView로 자동화할 수 있습니다.

  4. 외부 서비스 링크 연결: 단축 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. 마무리 및 다음 편 예고

TemplateViewRedirectView는 Django 프로젝트에서 가장 간단한 페이지 처리를 손쉽게 관리할 수 있도록 도와주는 클래스 기반 뷰입니다.
DB 연동이나 폼 검증 같은 복잡한 로직이 필요 없을 때, 이들을 사용하면 중복 코드를 줄이고, 프로젝트 구조를 더욱 깔끔하게 유지할 수 있죠.

이제 우리가 CBV로 “정적 페이지”, “리디렉션”, “CRUD(작성/수정/삭제)”, “리스트/상세 보기”, “폼 처리” 등
웹 개발의 필수 요소 대부분을 구현할 수 있게 되었습니다!

다음 편(시리즈 7편)에서는 Django에서 자주 쓰이는 Mixin을 활용해 공통 기능을 간단히 재사용하고, 권한 관리로그인 체크 등을 효율적으로 구현하는 방법을 소개할 예정입니다.


이전 글 다시 보기

  1. 클래스 기반 뷰(CBV) 탐구 시리즈 #1 – FBV에서 CBV로 가는 이유와 개발자의 자세
  2. 클래스 기반 뷰(CBV) 탐구 시리즈 #2 – Django의 기본 View 클래스 이해하기
  3. 클래스 기반 뷰(CBV) 탐구 시리즈 #3 – FormView로 폼 처리 쉽게 하기
  4. 클래스 기반 뷰(CBV) 탐구 시리즈 #4 – ListView & DetailView 활용법
  5. 클래스 기반 뷰(CBV) 탐구 시리즈 #5 – CreateView, UpdateView, DeleteView로 CRUD 구현하기

“TemplateView와 RedirectView로 번거로운 정적 페이지 처리와 리디렉션을 자동화하고,
프로젝트를 더욱 간결하고 생산적으로 만드세요!”