본문으로 바로가기

404 에러 핸들링

category Django, Flask/🔫 Django 2020. 6. 18. 21:31

 

try/except를 이용해서 에러를 핸들링해보려고 한다.

에러를 그냥 긁어서 붙였던 일반 파이썬과 달리 에러를 모델 내부 에러 속성을 따와서 써야 한다.

 

다음 코드는 pk에 해당하는 정보가 없으면 redirect 하도록 처리한 코드이다.

from django.urls import reverse
from django.shortcuts import render, redirect
from . import models

def room_detail(request, pk):
    try:
        room = models.Room.objects.get(pk=pk)
    except models.Room.DoesNotExist:
        return redirect(reverse("core:home"))

    return render(request, "rooms/detail.html", {"pk": pk, "room": room})

 

 

404 페이지를 만들어 처리할 수도 있다.

독특하게도, Http404 에러를 raise하면 templates에 있는 404.html을 자동으로 찾아서 렌더링한다.

404.html을 templates 내의 다른 폴더에 옮기면 django가 찾지 못하므로 주의하자.

 

from django.http import Http404
from django.shortcuts import render, redirect
from . import models

def room_detail(request, pk):
    try:
        room = models.Room.objects.get(pk=pk)
    except models.Room.DoesNotExist:
        raise Http404() # templates/404.html을 자동 렌더링한다.

    return render(request, "rooms/detail.html", {"pk": pk, "room": room})

 

CBV의 경우 DetailView를 Generic View로 사용하는 경우 별도로 Http404 설정을 해주지 않아도 404.html을 찾습니다.

 

class RoomDetail(DetailView):

    model = models.Room

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체