class SampleViewClass(MixinClass, ViewClass):
...
์ฐธ๊ณ ์๋ฃ - Django Using mixins with class-based views
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, HttpResponseRedirect, redirect
from django.views.generic import TemplateView, CreateView, UpdateView, DeleteView, ListView, DetailView, FormView
from .models import Task, ChecklistItem
from django.utils import timezone
from django.core.paginator import Paginator
from django.urls import reverse_lazy
class TaskDetailView(DetailView):
model = Task
template_name = "pages/task_detail.html"
# primary key ์ญํ ์ ํ๋ ํ๋ผ๋ฏธํฐ ๋ณ์๋ช
์ง์ , path parameter
pk_url_kwarg = 'task_id'
# checklistitem์ ๋ฐ์์ผํ๋ฏ๋ก get_context_data๋ฅผ ์ฌ์ฉํด์ผํจ
# ๊ธฐ์กด ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ context์ checklists๋ฅผ ํฌํจ์ํด
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["checklists"] = ChecklistItem.objects.filter(task=self.object).all()
return context
from django.db.models.query import QuerySet
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, HttpResponseRedirect, redirect
from django.views.generic import TemplateView, CreateView, UpdateView, DeleteView, ListView, DetailView, FormView
from .models import Task, ChecklistItem
from django.utils import timezone
from django.core.paginator import Paginator
from django.urls import reverse_lazy
# Mixin์ ํ์ฉํ ์ฝ๋ ๋ฆฌํฉํ ๋ง ์งํ
from django.views.generic.detail import SingleObjectMixin
class TaskDetailView(SingleObjectMixin, ListView):
template_name = "pages/task_detail.html"
# primary key ์ญํ ์ ํ๋ ํ๋ผ๋ฏธํฐ ๋ณ์๋ช
์ง์ , path parameter
pk_url_kwarg = 'task_id'
paginate_by = 5
def get(self, request, *args, **kwargs):
self.object = self.get_object(queryset=Task.objects.all())
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['task_id'] = self.object
return context
def get_queryset(self):
return ChecklistItem.objects.filter(task=self.object).all()
from django.views.generic import ListView
from django.views.generic.detail import SingleObjectMixin
from books.models import Publisher
class PublisherDetailView(SingleObjectMixin, ListView):
paginate_by = 2
template_name = "books/publisher_detail.html"
def get(self, request, *args, **kwargs):
self.object = self.get_object(queryset=Publisher.objects.all())
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["publisher"] = self.object
return context
def get_queryset(self):
return self.object.book_set.all()
page_obj
์ด๋ค. ํ์ด์ง ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.ํญ๋ชฉ | ์ค๋ช |
---|---|
paginator.count | ์ ์ฒด ๊ฒ์๋ฌผ ๊ฐ์ |
paginator.per_page | ํ์ด์ง๋น ๋ณด์ฌ์ค ๊ฒ์๋ฌผ ๊ฐ์ |
paginator.page_range | ํ์ด์ง ๋ฒ์ |
number | ํ์ฌ ํ์ด์ง ๋ฒํธ |
previous_page_number | ์ด์ ํ์ด์ง ๋ฒํธ |
next_page_number | ๋ค์ ํ์ด์ง ๋ฒํธ |
has_previous | ์ด์ ํ์ด์ง ์ ๋ฌด |
has_next | ๋ค์ ํ์ด์ง ์ ๋ฌด |
start_index | ํ์ฌ ํ์ด์ง ์์ ์ธ๋ฑ์ค(1๋ถํฐ ์์) |
end_index | ํ์ฌ ํ์ด์ง ๋ ์ธ๋ฑ์ค(1๋ถํฐ ์์) |