django 13. Class Based View

dev-somi·2022년 1월 22일
0

django

목록 보기
12/13
  1. View 함수를 만들어주는 클래스
    • as_view()를 통해서 View 함수 생성
    • 상속을 통해 여러 기능을 믹스

https://github.com/django/django/blob/main/django/views/generic/list.py

  1. 구현해보기

def post_detail(request: HttpRequest, pk: int) -> HttpResponse:
post = Post.objects.get(pk=pk) #pk라는 필드 지정 (종류) = 실제 값 Pk (즉 pk 번호가 pk(숫자)인 url에 접속해서 해당 데이터를 가져온다.)
return render(request, 'instagram/post_detail.html', {
'post' : post,
})

여기서 pk는 int형으로 들어간다. (urls.py에서 지정해줌)
즉 로직은 url 뒤에 있는 숫자를 pk로 받고 해당 pk(id)를 가진 post를 가져와서 post라는 변수에 저장한다.
그리고 post_detail.html 내용을 표시한다.

<h/2>Author: {{ post.author }}</h/2>
{% if post.photo %}

{% endif %}

{{ post.message}}

post_detail.html를 보면 가져온 post의 작성자를 표시하고
photo url을 가져온다.

이렇게 표시가 된다.

근데 위와 같이 pk=100이고 pk=100인 Post가 없을 때는 DoesNotExist가 생성된다.

def post_detail(request: HttpRequest, pk: int) -> HttpResponse:
post = get_object_or_404(Post, pk=pk)

# try:
#     post = Post.objects.get(pk=pk) #pk라는 필드 지정 (종류) = 실제 값 Pk (즉 pk 번호가 pk(숫자)인 url에 접속해서 해당 데이터를 가져온다.)
# except Post.DoesNotExist:
#     raise Http404 
return render(request, 'instagram/post_detail.html', {
    'post' : post,
})

위 코드를 쓰면 404 에러 처리가 된다.

0개의 댓글