TemplateHTMLRenderer
🔎 TemplateHTMLRenderer
오늘은 여태까지 통상적으로 사용했던 JSONRednerer말고 HTMLRenderer를 사용해봤다.
TemplateHTMLRenderer 클래스는 딕셔너리 형태로 데이터를 넘겨줘야한다. 보통 context라는
변수를 통해 넘겨주는거 같다.
ex. context = {“key”:vlaue}
그리고 template_name을 지정해주는데, view 또는 리턴 값에서 지정해준다.
📝 전체 게시물 확인
views ```python
CASE1. view에 template_name 지정.
class PostList(APIView): renderer_classes = [TemplateHTMLRenderer] template_name = ‘posts/post_list.html’
def get(self, request):
post = Post.objects.all()
context = {
"post" : post
}
return Response(context)
CASE2. 리턴 값에 template_name 지정.
class PostList(APIView): renderer_classes = [TemplateHTMLRenderer]
def get(self, request):
post = Post.objects.all()
context = {
"post" : post
}
return Response(context,template_name = 'posts/post_list.html') ```
📝 게시물 수정
view ```python class PostEditView(GenericView): serializer_class = PostViewSerializer rendered_classes = [TemplateHTMLRenderer]
def post(request,pk):
post = get_object_or_404(Post, pk=pk)
serializer = self.serializer_class(post, data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return redirect('post-list') ```
📝 게시물 올리기
views
django를 할 때도, post를 할 때 if request.method == 'post'
로 시작했었다.
여기서도 마찬자기로 빈 serializer 객체를 가져오고 거기에서 post를 했어야했다.
class PostingPostView(GenericAPIView):
renderer_classes = [TemplateHTMLRenderer]
serializer_class = PostViewSerializer
template_name = 'posts/posting.html'
def get(self,request):
serializer = self.serializer_class(data=request.data)
serializer.is_valid()
return Response({"serializer":serializer})
def post(self,request):
serializer = self.serializer_class(data=request.data)
serializer.is_valid()
serializer.save(user_id=ruquest.user)
return redirect('post-list')
📝 게시물 삭제
views
class PostDeleteView(GenericAPIView):
renderer_classes = [TemplateHTMLRenderer]
serializer_class = PostViewSerializer
template_name = 'posts/post_delete.html'
def get(self,request,pk):
post = get_object_or_404(Post, pk=pk)
return Response({"post":post})
def post(self, request, pk):
post = get_object_or_404(Post, pk=pk)
post.delete()
return redirect('posts:post-list')