Djangoに触る(その5)
5日目です.
チュートリアルの続きに挑みます
前回まで
ビューの修正を行いました.
今日やったところ
はじめての Django アプリ作成、その 3 | Django ドキュメント | Django
ここの残り部分,404エラーの創出を行いました
renderの使用
前回はテンプレートをロードし,値を入れレンダリングし,HttpResponseオブジェクトを読み込むといった処理をしていました. この処理はよく使われるということで,Djangoではこれらをささっとこなすための処理が実装されています. なのでそれを組み込んで行きます
polls/view.py
を次の内容を追記.修正します.
from django.shortcuts import render from .models import Question def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] context = {'latest_question_list': latest_question_list} return render(request, 'polls/index.html', context)
ビュー自体は変わっていないです.
404エラーの追記
前回polls
にアクセスした時のビューを修正し,htmlを読み出したり,IDに対応したペーシを生成したりしました.
今回は,想定されていないIDが飛んできたときに404を返すように追記したいと思います,
polls/view.py
のdetail
を中心に次の内容に追記.修正します.
from django.http import Http404 from django.shortcuts import render 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})
加えて,polls/templates/polls/detail.html
を以下のように作成します
{{ question }}
この状態でサーバを起動しアクセスします.
対応するIDが存在しないページにアクセスするとこのように404エラーを吐いてくれます.
また404エラーも非常によく使う例外なので,
djangoのほうにショートカットが提供されています.
get_object_or_404
というモジュールです.
それを使ってdetail()
を書き換えると以下のようになります.
from django.shortcuts import get_object_or_404, render def detail(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question})
おわりに
404とショートカットについてです.
django自体が色々なものをささっとやる環境なのに,ショートカットまであるとは….
あとチュートリアルが7まであるので,そこまではなるべく毎日更新で頑張りたいと思います. それ以降は何かを作るのをやりたいと思ってます.