-
[Django] CBV(generic view)카테고리 없음 2020. 8. 4. 20:35
왜 굳이 클래스?
function = class = callable object
django의 view는 호출가능한 객체로 정의한다.함수로 작성한 것과 뭔차이?
상속
중복의 제거, 코드의 재사용중복 코드 -> 부모 클래스
새로운 코드 -> 부모 클래스 상속한 자식 클래스그럼 FBV는??
미리 약속된 값을 지키는 것보다 내 생각대로 후루룩쓰는게 편하겠죠?
crud 중 delete 만 예시로 들겠습니다.
generic view를 사용했을 때 urls.py
path('delete/<int:pk>', views.BlogDelete.as_view(), name='delete')
views.py 를 봅시다!
from django.urls import reverse_lazy #url redirect from django.views.generic.list import ListView from django.views.generic.detail import DetailView from django.views.generic.edit import CreateView, UpdateView, DeleteView from .models import ClassBlog class BlogView(ListView): model = ClassBlog class BlogCreate(CreateView): model = ClassBlog field - ['title', 'body'] #모델의 필드 중에 title, body만 직접 쓰겠다. success_url = reverse_lazy('list') class BlogDetail(DetailView): model = ClassBlog class BlogUpdate(UpdateView): model = ClassBlog field - ['title', 'body'] success_url = reverse_lazy('list') class BlogDelete(DeleteView): modle = ClassBlog success_url = reverse_lazy('list')
templates 과 관련된 규약들
html의 default로 설정된 표준 이름을 먼저 준수해야한다.
class BlogView(ListView): #html : 블로그 리스트를 담은 html : (소문자모델)_list.html class BlogCreate(CreateView): #html : form(입력공간)을 갖고있는 html : (소문자모델)_form.html class BlogDetail(DetailView): #html : 상세 페이지를 담은 html :(소문자모델)_detail.html class BlogUpdate(UpdateView): #html : form(입력공간)을 갖고있는 html : (소문자모델)_form.html class BlogDelete(DeleteView): #html : "이거 진짜 지울거야?" html : (소문자모델)_confirm_delete.html
마음대로 template이름을 바꾸려면 따로 명시해야한다.
class BlogView(ListView): template_name = 'classcrud/list.html' model = ClassBlo
객체를 object로 표현하면 어떻게 구분하나?
{% for blog in object_list %}
object가 여러개면? 사진 object 또는 게시글 object 등등class BlogView(ListView): template_name = 'classcrud/list.html' context_object_name = 'blog_list' model = ClassBlo
{% for blog in blog_list %}