django 06. 두번째 장고앱 7 - 404 핸들링
05 Mar 2017 | python 파이썬 Django templatedjango 06. 두번째 장고앱 7 - 404 핸들링
템플릿 파일 작성 - detail.html
- 위치 : app2/polls/templates/polls/detail.html
- detail.html 코드내용
{{ question }}
views.py 와 templates 의 detail.html 파일 연결
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from .models import Question
# url을 views 의 메소드들과 연결해주는 것 >> function based view
def detail(request, question_id):
q = Question.objects.get(pk = question_id)
return render(request, 'polls/detail.html', {'question' : q})
404 페이지 표시 - try-except 예외처리 사용
- 에러가 날 경우에는
예외처리
를 통해서 404 페이지를 표시하는 것이 좋다. - django.http의
Http404
함수를 import 한다.
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse, Http404
from .models import Question
def detail(request, question_id):
# 예외처리
try:
q = Question.objects.get(pk = question_id) # 에러가 발생할지 모르는 코드
except Question.DoesNotExist: #DoesNotExist 에러가 발행하면
raise Http404("Question %s does not exist" % question_id)
return render(request, 'polls/detail.html', {'question' : q})
404 페이지 표시 - shortcuts 사용
- 예외처리를 통한 404 페이지 표시는
아주 많이 사용되는
기능이다. - 따라서 장고에서는
get_object_or_404
등의 통해 간단하게 기능을 구현할 수 있다. get_list_or_404
함수도 있다. 관련문서
from django.shortcuts import render, get_object_or_404
# Create your views here.
from django.http import HttpResponse
from .models import Question
def detail(request, question_id):
q = get_object_or_404(Question, pk = question_id)
return render(request, 'polls/detail.html', {'question' : q})