django 14. CBV API

dev-somi·2022년 1월 22일

django

목록 보기
13/13

1. DetailView

  • 1개 모델의 1개 object에 대한 템플릿 처리
  • pk를 직접 넘겨주지 않아도 내부적으로 찾아서 넘겨준다.
  • template_name이 지정되지 않았다면 모델명으로 템플릿 경로를 유추한다.

post_detail = DetailView.as_view(
model=Post,
queryset=Post.objects.filter(is_public=True)) # filter 가능

공개된 포스팅 내에서 (필터) detailview 처리를 한다.

class PostDetailView(DetailView):
model = Post
def get_queryset(self):
qs = super().get_queryset()
if not self.request.user.is_authenticated:
qs = qs.filter(is_public=True)
return qs

보통 위와 같이 많이 구현을 하는데,
로그인이 되어 있지 않다면 공개된 것만 filter를 하는 기능이다.

2. ListView

  • 1개 모델에 대한 List 템플릿 처리
  • html 응답 이외에 다른 응답을 줄 수 있도록 한다.
  • 페이징 처리 지원

for i in range(100):
... post = random.choice(post_list)
... post.pk = None
... post.save()

post_list = ListView.as_view(model=Post, paginate_by=10)

총 100개의 파일을 복사 붙이기로 만들었는데
paginate_by 기능을 사용하여서
한 페이지 당 10개씩 볼 수 있도록 구현 가능하다.

0개의 댓글