알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
django 404 에러 일으키기 본문
django 404 에러 일으키기
polls/views.py
from django.shortcuts import render # Create your views here. from django.http import HttpResponse from .models import Question from django.template import loader from django.http import Http404 def detail(request,question_id): try: question = Question.objects.get(pk=question_id) except Question.DoesNotExist: raise Http404("Question does not exist") return render(request, 'polls/detail.html', {'question': question})
여기서 해석을 해보면
Question.objects.get(pk=question_id) 은
id 부분을 의미하게 됩니다.
그래서 만약에 데이터 베이스 id 값에 없는 값을 호출할시에 404 페이지를 보내겠다는것입니다.
detail(request,question_id) 의 question_id 은
polls/urls.py
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), # ex: /polls/5/ url(r'^(?P$lt;question_id$gt;[0-9]+)/$', views.detail, name='detail'), # ex: /polls/5/results/ url(r'^(?P$lt;question_id$gt;[0-9]+)/results/$', views.results, name='results'), # ex: /polls/5/vote/ url(r'^(?P$lt;question_id$gt;[0-9]+)/vote/$', views.vote, name='vote'), ]
여기서 url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), 에서 question_id에 값을 매칭 시켜
detail(request,question_id) 의 question_id에 넣어 줍니다.
그럼 http://10.23.10.232:8888/polls/1/ 을 호출 하게 되면
question = Question.objects.get(pk=1)
http://10.23.10.232:8888/polls/2/ 을 호출 하게 되면
question = Question.objects.get(pk=2)
가 됩니다.
위에 데이터베이스 대로 라면 http://10.23.10.232:8888/polls/6/ Question.DoesNotExist가 발생하여 부터는 404 페이지를 띄울것입니다.
return render(request, 'polls/detail.html', {'question': question})
을 충족 시키기 위해서
polls/templates/polls/detail.html 파일을 만들어 줍니다.
polls/templates/polls/detail.html
{{ question }}
sudo service apache2 restart
위와 같이 데이터베이스 6이 없으니 에러가 뜨게 됩니다.
이것 또한 자주 사용하다 보니 편리하게 사용하도록 함수를 제공 합니다.
from django.shortcuts import get_object_or_404, render # Create your views here. from django.http import HttpResponse from .models import Question def detail(request,question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question})
위와 같이 간단히 적어서 사용 하기도 합니다.
'Web > Django' 카테고리의 다른 글
dajngo Template 에서 하드코딩된 URL 을 제거 (0) | 2017.08.12 |
---|---|
Template 시스템 사용하기 (0) | 2017.08.12 |
django view와 template 연동하기 (0) | 2017.08.12 |
Django view 작성하기 (0) | 2017.08.11 |
django 관리 사이트 poll app 셋팅 (0) | 2017.08.08 |