しゃちの備忘録

プログラミングを中心とした技術関連の備忘録です(今のところ)

Djangoに触る(その5)

5日目です.

チュートリアルの続きに挑みます

前回まで

teru0rc4.hatenablog.com

ビューの修正を行いました.

今日やったところ

はじめての 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.pydetailを中心に次の内容に追記.修正します.

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 }}

この状態でサーバを起動しアクセスします.

f:id:teru0rc4:20170904022248p:plain

対応するIDが存在しないページにアクセスするとこのように404エラーを吐いてくれます.

f:id:teru0rc4:20170904021709p:plain

また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まであるので,そこまではなるべく毎日更新で頑張りたいと思います. それ以降は何かを作るのをやりたいと思ってます.