장고

장고(Django) | 오류 페이지 오류 코드 변경하기

PuddingHong 2022. 1. 22. 02:25
728x90
반응형

이번에는 오류 페이지를 수정해보자.

HTTP의 주요 응답 코드 3개는 다음과 같다.

오류 코드 설명
200 성공
500 서버 오류
404 요청한 페이지를 찾을 수 없음

1. 404 페이지로 바꾸기

지난 글에서 질문 상세 페이지를 만들어보았다.

상세 페이지는 Question의 id를 기준으로 만들어지는데 이때 없는 id 값을 입력하면 다음 화면이 나온다.

위 페이지의 오류 코드는 500이다.

없는 데이터를 요청할 경우 'Not Found (404)' 페이지가 더 바람직하므로 404페이지를 출력하도록 수정해보자.

 

 

질문의 상세 페이지 화면을 수정하기 때문에  test_pages/views.py 에서 detail 함수를 수정한다.

▲ 수정 전 
▲ 수정 후

 

Question.objects.get(id = question_id) → get_object_or_404(Question, pk = question_id) 로 수정하고

get_object_or_404 를 import 했다.

 

 

여기서 사용한 pk는 Primary key의 줄임말로 Question 모델의 Primary Key인 id를 의미한다.

이렇게 수정하고 다시 페이지를 요청하면 다음처럼 404 페이지가 출력된다.

이때 맨 아래 문구를 해석해보면 settings 파일에서 DEBUG = True 로 설정해서 위와 같은 페이지가 뜨는데

True 값을 False로 바꾸면 표준 404 페이지를 출력한다고 한다.

 

 

2. 표준 404 페이지로 바꾸기

settings.py 파일에서 DEBUG = False 로 수정하고 터미널을 보면 에러 문구가 떠있다.

CommandError : You must set settings.ALLOWED_HOSTS if DEBUG is False

 

문구에 따라 settings 파일에서 ALLOWED_HOSTS를 지정해주자.

 

우리는 로컬 호스트를 쓰고 있으므로 ALLOWED_HOSTS = ['127.0.0.1'] 로 수정하고 다시 페이지에 접속했다.

 

 

3. 404 페이지 수정하기

템플릿을 이용하여 404페이지를 수정해보자.

mysite/templates에 404.html 파일을 생성하고 아래와 같이 작성하고 페이지에 접속해보았다.

(404 페이지는 공용 템플릿으로 이용할 것이므로 templates 폴더에 생성하였다.)

허걱... 이건 404 Not Found

 

728x90