📌 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 }} | "장고 입문" 출력됨 |
✅ 흐름 다시 요약
- self.object = self.get_object() → 현재 블로그 객체를 변수에 저장
- get_context_data() 호출 시 Django가 자동으로 context['object']에 담아줌
- 템플릿에서는 {{ 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 |