ListView
주로 목록을 나타낼 때 사용한다.
views.py
from django.views.generic import ListViev
class Categories(ListView):
model = Category
template_name = 'manager/categories_list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
model – 불러올 데이터 모델
template_name – 템플릿 경로
get_context_data(self, **wargs) –
사용자에게 보여지기 전, 클래스가 생성되고 해당 데이터들을 받아 수정할 수 있는 함수이다.
이곳에서 데이터를 담아 보낼 수 있다.
views.py
from django.views.generic import ListViev
class Categories(ListView):
model = Category
template_name = 'manager/categories_list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['user'] = self.user
return context
context[] 사이에 템플릿에서 사용할 이름을 적고 해당 공간에 값을 넣어주면 된다.
FormView
FormView는 폼에 특화되어 있어서 form.py에서 생성한 폼을 이용한다면 해당 클래스를 사용하는 것도 좋다.
forms.py
class RegisterCategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = '__all__'
widgets = {
'parent':forms.Select(
attrs={'class': 'form-control',
'id': 'sel1',
'placeholder': '입력하세요'
}),
'name':forms.TextInput(
attrs={'class': 'form-outline',
'id': 'textAreaExample6',
'placeholder': '입력하세요'
}),
'slug': forms.TextInput(
attrs={'class': 'form-outline',
'id': 'textAreaExample6',
'placeholder': '입력하세요'
})
}
def clean(self):
cleaned_data = super().clean()
name = cleaned_data.get('name')
slug = cleaned_data.get('slug')
description = cleaned_data.get('description')
views.py
from django.views.generic.edit import FormView
class Categories_Register(FormView):
template_name = 'manager/categories_register.html'
form_class = RegisterCategoryForm
success_url = reverse_lazy('manager:categories')
def form_valid(self, form):
form.save()
return redirect('manager:categories')
success_url – 해당 작업들이 완료된 후 이동할 URL를 작성한다.
form_valid(self,form) –
폼이 생성되고 사용자가 작성 후 이벤트를 발생시켜 폼이 다시 뷰에서 폼내용이 확인이 되면 해당 함수가 실행된다. 주로 CUD,(Create, Upate,Delete)에 사용한다.
DetailView
하나의 pk값을 받아와 조회하여 사용자에게 보여주기 위한 목적에 특화되어 있는 듯 하다.
views.py
from django.views.generic import DetailView
class ProductDetailView(DetailView):
template_name = "product/product_detail.html"
queryset = Product.objects.all()
context_object_name = 'product'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
queryset – 페이지에 보여줄 데이터 쿼리를 작성한다.
DeleteView
pk 값을 받아와 데이터를 삭제할 때 사용한다.
views.py
from django.views.generic import DeleteView
class ProductDeleteView(DeleteView):
model = Product
success_url = '/product'