SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Djangoチュートリアル

Djangoチュートリアル(後編)

Python対応のWebアプリケーションフレームワーク


ショートカットの使用

 ここでさらに一歩進めて「DBを検索してデータがなかったらHTTPレスポンスコード404を返す」という記述は定型的であり、誰が書いても大体同じ記述になるので共通化したいところです。Djangoではそのような定型的な記述を簡潔に記述できるようにするための「ショートカット(Shortcuts)」というライブラリを用意しています。ここでは「get_object_or_404」というショートカットを使用して、404エラーを返せるようにします。リスト8にショートカットを使用したソースを示します。

[リスト8]views.py(get_object_or_404ショートカットを使用して404エラーを返す)
from django.shortcuts import get_object_or_404

def item_page_display(request,item_id):

    item = get_object_or_404(Item,id=item_id)  #ショートカットを使用(データが存在しない場合404エラーが返る)

    t = loader.get_template('page/item.html')
    c = Context(
        {'item':item }
    )
    return HttpResponse(t.render(c))

 ブラウザをリロードすると、図8と同じ404エラーが表示されます。

汎用ビュー(Generic Views)

 ここでitem_page_displayビュー関数のコードをさらに短くしてみましょう。コードの後半部分で「Templateインスタンスを取得後、 Contextのインスタンスを生成し、TempateのrenderメソッドでレンダリングしたHTML文字列をHttpResponseのコンストラクタに渡して返す」という処理が記述されていますが、これもビューに関する決まりきった処理であると言えます。このようにビューの処理に関する定型的な処理を何度も書かなくて済むように汎用化した機能が、Djangoでは「汎用ビュー(Generic Views)」として用意されています。

direct_to_template汎用ビューの適用

 ここではdirect_to_template汎用ビューを使用します。direct_to_template汎用ビューは引数にrequestオブジェクトと、リダイレクト先テンプレート名、そしてテンプレートにマージしたい値を格納した辞書(dictionary)を引数に指定します。 direct_to_template汎用ビューをitem_page_displayビュー関数で使用したのがリスト9です。なお汎用ビューでは共通の省略可能な引数を用意していて、デフォルト値から変更したい場合は必要に応じて引数を指定します。今回はその共通引数は指定しません。

[リスト9]views.py(汎用ビューのdirect_to_templateを使用)
def item_page_display(request,item_id):

    item = get_object_or_404(Item,id=item_id)

    return direct_to_template(
        request,'page/item.html',
        extra_context={'item': item}
    )

次のページ
Formの使用

修正履歴

この記事は参考になりましたか?

Djangoチュートリアル連載記事一覧
この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4264 2009/09/16 17:58

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー