📌 Django CBV에서 self.object, context['object'] 완전 정복하기

2025. 5. 9. 16:55·기술블로그-Django편

📌 Django CBV에서 self.object, context['object'] 완전 정복하기


✅ 시작 질문: "왜 context['object'] = self.object 를 쓰는 거야?"

처음 사용자는 다음과 같은 질문에서 시작했습니다:

템플릿에서 댓글을 달 수 있게 되어 있는데, 버튼 누르면 어디서 어떤 처리가 일어나는지 헷갈려요.
self.object = self.get_object() 이건 왜 필요한 거고,
context['object'] = self.object는 도대체 어디 있는 건지도 모르겠어요.


1️⃣ 기본 구조 다시 보기

class BlogDetailView(DetailView):
    model = Blog
    template_name = 'blog_detail.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['comment_form'] = CommentForm()
        return context
  • model = Blog: 이 뷰는 Blog 모델을 대상으로 작동함
  • template_name: 어떤 HTML 템플릿으로 그릴지 지정
  • get_context_data(): 템플릿에 넘길 데이터를 딕셔너리 형태로 구성

2️⃣ 사용자의 핵심 질문들

❓ self.object는 뭐고, 왜 변수에 담아줘?

  • self.object = self.get_object() 는 현재 보고 있는 블로그 글을 self.object 변수에 저장하는 거예요.
  • CBV 내부에서 get_context_data()나 render_to_response() 등에서 self.object를 자동으로 사용하기 때문에 필수로 지정해줘야 합니다.

❓ context['object'] = self.object 는 어디에 있는 거야?

  • 우리가 직접 안 쓰더라도, super().get_context_data() 안에서 Django가 자동으로 이렇게 해줍니다:
context['object'] = self.object
context['blog'] = self.object  # 모델명이 Blog일 경우

❓ 그럼 실제로 어떤 값이 들어가는 건데?

✅ 예제 코드: Blog 모델이 이렇게 생겼다고 해볼게요

# models.py
class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

✅ 예제 데이터 (DB에 저장된 값)

Blog.objects.create(id=3, title='장고 입문', content='클래스 기반 뷰를 배워봅시다')

✅ View가 /blog/3/ 요청을 받았을 때

self.object = self.get_object()
# 내부적으로는 아래처럼 동작해요:
self.object = Blog.objects.get(pk=3)

즉, self.object는 아래와 같은 Python 객체입니다:

<Blog: Blog object (3)>  # 실제로는 title, content 필드를 포함한 모델 인스턴스

✅ 그 다음 이 코드 실행

context['object'] = self.object

→ 실제로는 이렇게 저장되는 것과 같아요:

context = {
    'object': Blog(id=3, title='장고 입문', content='클래스 기반 뷰를 배워봅시다')
}

✅ 템플릿에서는 이렇게 씀

<h1>{{ object.title }}</h1>  <!-- 장고 입문 -->
<p>{{ object.content }}</p> <!-- 클래스 기반 뷰를 배워봅시다 -->

📌 정리

요소 실제 들어가는 값

self.object Blog 모델 객체 (Blog(id=3, title=..., content=...))
context['object'] 위 self.object와 동일한 객체
템플릿에서 {{ object.title }} "장고 입문" 출력됨

✅ 흐름 다시 요약

  1. self.object = self.get_object() → 현재 블로그 객체를 변수에 저장
  2. get_context_data() 호출 시 Django가 자동으로 context['object']에 담아줌
  3. 템플릿에서는 {{ object.필드 }} 형태로 꺼내 씀

💬 한 줄 결론

context['object']는 우리가 직접 안 써도, Django CBV가 템플릿에서 사용하기 쉽게 자동으로 self.object를 담아주는 키다!


이제 object가 추상적인 개념이 아니라, 진짜 Blog 인스턴스 객체가 들어있는 템플릿용 변수라는 게 정확히 보이시죠? 더 이상 헷갈릴 필요 없습니다 😄

'기술블로그-Django편' 카테고리의 다른 글

📌 Django CreateView에서 form.save(commit=False)와 self.object 완전 해부  (0) 2025.05.09
📌 Django에서 prefetch_related 완전 정복하기 (쿼리 최소화)  (0) 2025.05.09
📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복 version 2  (0) 2025.05.09
📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복  (0) 2025.05.09
🧠 Django ModelForm에서 위젯 설정 완전 이해하기 (widgets, form-control)  (0) 2025.05.09
'기술블로그-Django편' 카테고리의 다른 글
  • 📌 Django CreateView에서 form.save(commit=False)와 self.object 완전 해부
  • 📌 Django에서 prefetch_related 완전 정복하기 (쿼리 최소화)
  • 📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복 version 2
  • 📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (717) N
      • Python (32)
      • 프로젝트 (55) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41) N
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django CBV에서 self.object, context['object'] 완전 정복하기
상단으로

티스토리툴바