이번에는 ListView 에 대해서 알아보겠습니다.
클래스 기반 뷰 하위에는 생성, 상세, 업데이트, 삭제, 리스트 등이 있다.
Model based Class base Views - Create, Detail, Update, Delete, List.
간단하게 설명하면, 모델에서 인스턴스 생성, 모델 인스턴스에 대한 DetailView 생성, 인스턴스 업데이트 및 삭제,
여러 인스턴스/디비에 있는 특정 모델의 모든 인스턴스 나열 이라고 할 수 있다.
views.py 에서 TeacherListView 를 생성 - class TeacherListView(ListView):
from django.shortcuts import render
from django.urls import reverse_lazy, reverse
from django.views.generic import TemplateView, FormView, CreateView, ListView
from classroom.forms import ContactForm
from classroom.models import TeacherModel
class HomeView(TemplateView):
template_name = 'classroom/home.html'
class ThankYouView(TemplateView):
template_name = 'classroom/thank_you.html'
class TeacherCreateView(CreateView):
model = TeacherModel
# model 을 설정하면 자동으로 model_form.html 을 찾는다(동일 장고 앱레벨에서)
# 여기서는 teachermodel_form.html 파일을 찾는다.
# .save() 가 자동으로 호출된다.
fields = '__all__' # ['first_name', 'last_name', 'subject']
success_url = reverse_lazy('classroom:thank_you')
class TeacherListView(ListView):
# model 을 설정하면 자동으로 model_list.html 을 찾는다(동일 장고 앱레벨에서)
# 여기서는 teachermodel_list.html 파일을 찾는다.
model = TeacherModel
# 기본 queryset 은 TeacherModel.objects.all() 임.
queryset = TeacherModel.objects.order_by('last_name')
# context_object_name 설정을 안하면 html 에서 받는 인자는 object_list 로 명명된다.
context_object_name = 'teacher_list'
./classroom/templates/classroom/teachermodel_list.html 생성.
"model = TeacherModel" 로 설정하면 Django 에서는 자동으로 "teachermodel_list.html" 파일을 찾는다.
<body>
<h1>List of Teachers (ListView)</h1>
<ul>
<!-- views 에서 context_object_name 을 설정하면 object_list->"설정한 변수명"으로 변경가능 -->
{% for teacher in teacher_list %}
<li>{{teacher.first_name}} {{teacher.last_name}}</li>
{% endfor %}
</ul>
</body>
urls.py 에서 path 추가 - list_teacher
# domain.com/classroom
urlpatterns = [
# path('', views.home_view, name='home'), # path expects a function!
path('', views.HomeView.as_view(), name='home'), # 클래스를 가지고 경로에 대한 함수를 반환
path('thank_you/', views.ThankYouView.as_view(), name='thank_you'),
path('contact/', views.ContactFormView.as_view(), name='contact'),
path('create_teacher/', views.TeacherCreateView.as_view(), name='create_teacher'),
path('list_teacher/', views.TeacherListView.as_view(), name='list_teacher'),
]
home.html 에 링크 추가
<body>
<h1>Welcome to home.html</h1>
<ul>
<li>
<a href="{% url 'classroom:thank_you' %}">THANK YOU PAGE LINK</a>
</li>
<li>
<a href="{% url 'classroom:contact' %}">CONTACT PAGE LINK</a>
</li>
<li>
<a href="{% url 'classroom:create_teacher' %}">CREATE NEW TEACHER PAGE LINK</a>
</li>
<li>
<a href="{% url 'classroom:list_teacher' %}">LIST TEACHERS PAGE LINK</a>
</li>
</ul>
</body>
결과 화면
'Python > Django' 카테고리의 다른 글
[Django] Class based View - UpdateView (0) | 2022.12.18 |
---|---|
[Django] Class based View - DetailView (0) | 2022.12.17 |
[Django] Class based View - CreateView (0) | 2022.12.17 |
[Django] Class based View - FormView (0) | 2022.12.16 |
[Django] Class based View - TemplateView (0) | 2022.12.15 |