제네릭 뷰 context 기본값

Ethan·2024년 1월 22일
0

Dear

목록 보기
13/13

제네릭 뷰에서는 context로 넘겨주는 데이터의 기본값이 있다. 즉, 지정해주지 않아도 자동으로 넘겨주는 데이터가 있으니 코드를 더 단순하게 작성할 수 있다.


1. ListView

ListView에서 기본값이 할당된 데이터를 알아본다.

  1. template_name
    기본값은 모델명_list.html 이므로 템플릿 이름이 일치한다면 삭제 가능
  1. context_object_name
    기본값은 object_list, 모델명_list 이므로 템플릿에 object_list 또는 모델명_list로 작성되어 있다면 삭제 가능
  1. page_kwarg
    기본값은 page 이므로 템플릿에 page로 작성되어 있다면 삭제 가능

1.1 비교

기존에 작성된 코드와 기본값을 이용해 삭제한 변경된 코드를 비교하면 다음과 같다.

#기존
class PostListView(ListView):
    model = Post
    template_name = "posts/post_list.html"  #기본값은 모델명_list.html
    context_object_name = "posts"  #기본값은 object_list, 모델명_list
    ordering = ['-dt_created']
    paginate_by = 9
    page_kwarg = 'page'  #기본값은 page
#변경
class PostListView(ListView):
    model = Post
    ordering = ['-dt_created']
    paginate_by = 9

2. DetailView

DetailView에서 기본값이 할당된 데이터를 알아본다.

  1. template_name
    기본값은 모델명_detail.html 이므로 템플릿 이름이 일치한다면 삭제 가능
  1. pk_url_kwarg
    기본값은 pk 이므로 url 패턴에서 <int:pk>라면 삭제 가능
  1. context_object_name
    기본값은 모델명 이므로 템플릿에 모델명으로 작성되었다면 삭제 가능

2.1 비교

기존에 작성된 코드와 기본값을 이용해 삭제한 변경된 코드를 비교하면 다음과 같다.

#기존
class PostDetailView(DetailView):
    model = Post
    template_name = "posts/post_detail.html"  #기본값은 모델명_detail.html
    pk_url_kwarg = "post_id"  #기본값은 pk
    context_object_name = "post"  #기본값은 모델명
#변경
class PostDetailView(DetailView):
    model = Post

3. CreateView

CreateView에서 기본값이 할당된 데이터를 알아본다.

  1. template_name
    기본값은 모델명_form.html이므로 템플릿 이름이 일치한다면 삭제 가능

3.1 비교

기존에 작성된 코드와 기본값을 이용해 삭제한 변경된 코드를 비교하면 다음과 같다.

#기존
class PostCreateView(CreateView):
    model = Post
    form_class = PostForm
    template_name = "posts/post_form.html"  #기본값은 모델명_form.html
    
    def get_success_url(self):
        return reverse("post-detail", kwargs={'post_id': self.object.id})
#변경
class PostCreateView(CreateView):
    model = Post
    form_class = PostForm
    
    def get_success_url(self):
        return reverse("post-detail", kwargs={'pk': self.object.id})

url 패턴에서 상세 페이지의 <int:post_id>를 <int:pk>로 변경했으니 kwargs=post_idpk로 변경해야 한다.


4. UpdateView

UpdateView에서 기본값이 할당된 데이터를 알아본다.

  1. template_name
    기본값은 모델명_detail.html 이므로 템플릿 이름이 일치한다면 삭제 가능
  1. pk_url_kwarg
    기본값은 pk 이므로 url 패턴에서 <int:pk>라면 삭제 가능

4.1 비교

기존에 작성된 코드와 기본값을 이용해 삭제한 변경된 코드를 비교하면 다음과 같다.

#기존
class PostUpdateView(UpdateView):
    model = Post
    form_class = PostForm
    template_name = "posts/post_form.html"  #기본값은 모델명_form.html
    pk_url_kwarg = "post_id"  #기본값은 pk
    
    def get_success_url(self):
        return reverse("post-detail", kwargs={"post_id": self.object.id})
#변경
class PostUpdateView(UpdateView):
    model = Post
    form_class = PostForm
    
    def get_success_url(self):
        return reverse("post-detail", kwargs={"pk": self.object.id})

url 패턴에서 수정 페이지의 <int:post_id>를 <int:pk>로 변경했으니 kwargs=post_idpk로 변경해야 한다.


5. DeleteView

DeleteView에서 기본값이 할당된 데이터를 알아본다.

  1. template_name
    기본값은 모델명_detail.html 이므로 템플릿 이름이 일치한다면 삭제 가능
  1. pk_url_kwarg
    기본값은 pk 이므로 url 패턴에서 <int:pk>라면 삭제 가능
  1. context_object_name
    기본값은 모델명 이므로 템플릿에 모델명으로 작성되었다면 삭제 가능

5.1 비교

기존에 작성된 코드와 기본값을 이용해 삭제한 변경된 코드를 비교하면 다음과 같다.

#기존
class PostDeleteView(DeleteView):
    model = Post
    template_name = "posts/post_confirm_delete.html"  #기본값은 모델명_confirm_delete.html
    pk_url_kwarg = "post_id"  #기본값은 pk
    context_object_name = "post"  #기본값은 모델명
    
    def get_success_url(self):
        return reverse("post-list")
#변경
class PostDeleteView(DeleteView):
    model = Post
    
    def get_success_url(self):
        return reverse("post-list")
profile
글로 쓰면 머리 속에 정리가 되...나?

0개의 댓글

관련 채용 정보