SHOEISHA iD

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

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

Djangoチュートリアル

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

モデルをHTMLに表示する

 データを作成したところで、DBからデータを取得しHTMLに表示する処理を作成します。

URLディスパッチャ、テンプレート、ビュー関数の関連

 モデルを作成したところで、作成したモデルをHTMLに表示する機能を実装します。URLディスパッチャ、ビュー関数、テンプレートシステムの関係を図6に示しました。

図6:URLディスパッチャ・ビュー関数・テンプレートシステムの関係
図6:URLディスパッチャ・ビュー関数・テンプレートシステムの関係

 図中に記載されている設定ファイルの記述、ソースコードについては順に説明していきます。

テンプレートの作成

 まずは、モデルを表示するためのテンプレートを作成します。

settings.pyの編集

 テンプレートファイルはDjangoのディレクトリ構造と切り離して設定することができます。「settings.py」ファイルのTEMPLATE_DIRSパラメータに、テンプレートを配置するルートフォルダを指定します。この値はカンマ区切りで複数指定することができます。ここでは「C:/codezine/django/templates」をテンプレート用のルートフォルダとして設定します。

[リスト20] settings.py TEMPLATE_DIRSパラメータの編集
TEMPLATE_DIRS = (
    'C:/codezine/django/templates',
)
テンプレートファイルの作成

 次に、テンプレートファイルを作成します。ファイルはsettings.pyのTEMPLATE_DIRSパラメータに指定した「C:/codezine/django/templates」の下にさらにpageフォルダを作成し「item.html」というファイル名(フルパス「C:/codezine/django/templates/page/item.html」)で作成します。ファイルの中身は次のとおりです。商品コード(item_code)、商品名(item_name)、価格(price)を表示するだけの簡単なページです。

[リスト21] item.html
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <title>{{ item.item_name }}</title>
<head>
<body>
<center>
商品コード:{{ item.item_code }}<br>
商品名:{{ item.item_name }}<br>
価格:{{ item.price }}円<br>
<br>
<input type="submit" value="買い物かごに入れる">
</center>
</body>
</html>

 テンプレートファイル内の「{{ item.item_name }}」と二重の中カッコになっている箇所に注目してください。ここはテンプレートがビュー関数で動的に変換される場所になります。ここでは商品コード、商品名、価格が表示時に動的に変換されます。

URLディスパッチャの定義

 URLによるビュー関数のディスパッチを定義するには、プロジェクトフォルダ「c:¥codezine¥ecsite」の「urls.py」を編集します。

[リスト22] urls.pyの編集
urlpatterns = patterns('',
    (r'^item/(?P<item_id>\d+)/$', 'ecsite.itempage.views.item_page_display'),
)

 urlpatterns変数内のpatterns関数の第1引数に正規表現でパスを定義し、第2引数に対応するビュー関数の名前を指定します。「r'^item/(?P<item_id>\d+)/$'」は、「item/数字/行末コード」を表します。数字の部分の「(?P<item_id>\d+)」は、マッチした部分をitem_idという名前の引数でビュー関数に渡すことを意味します。第2引数の「'ecsite.itempage.views.item_page_display'」は「ecsite.itempage.views」パッケージのビュー関数「item_page_display」を呼ぶことを意味します。ビュー関数「item_page_display」の実際のコードは以降で説明します。

ビュー関数の定義

 最後にビュー関数をコーディングします。アプリケーションフォルダのviews.pyにitem_page_display関数を定義します。item_page_display関数の引数は、HTTPリクエストを表すHttpRequestオブジェクトと、URLで指定されたitem_idの2つです。item_id引数は、URLディスパッチャの定義で説明したようにURLで指定されたitem_idが渡されます。ビュー関数では、引数item_idに該当するItemオブジェクトをO/RマッパーのAPIを取得し、テンプレートとマージして、レスポンスを表すHttpResponseオブジェクトを返します。HttpResponseのコンストラクタには、画面に表示するHTMLの文字列を設定します。

[リスト23] views.py
from django.http import HttpResponse
from django.template import Context, loader
from models import Item

def item_page_display(request,item_id):
    # item_idに該当するオブジェクトを取得する
    item = Item.objects.get(id=item_id)
    # テンプレートを取得して、モデルの値とマージする
    t = loader.get_template('page/item.html')
    c = Context(
        {'item':item }
    )
    # HTTP Responseを返す。
    return HttpResponse(t.render(c))

 item_page_display関数内で使われている処理の簡単な説明を以下の表に示します。

キャプション
処理 説明
Item.objects.get(id=item_id) Modelクラスのobjects属性は、オブジェクトマネージャと呼ばれ、DBから指定した条件に合ったオブジェクトや集合を取得するメソッドをもっています。getメソッドは、引数に指定された検索条件に合致する単一のオブジェクトを取得します。
loader.get_template('page/item.html') loaderクラスのget_templateメソッドは引数で指定されたテンプレートファイルを表したインスタンスを返します。テンプレートファイルのパスは、settings.pyファイルの「TEMPLATE_DIRS」に設定したフォルダからの相対パスを指定します。
Context({'item':item }) Contextクラスには、テンプレートに渡すデータを辞書形式で指定します。ここでは「item」という名前でItemクラスのインスタンスを設定しています。
t.render(c) Templateクラスのrenderメソッドは引数にContextクラスのインスタンスを受取り、テンプレート文字列とContextの情報をマージして文字列として返します。

商品ページの表示

 商品画面表示のためのそれぞれの設定、ファイル作成がひととおり終わったところでブラウザから「http://localhost:8000/item/1/」にアクセスしてみましょう。図7のような画面が表示されれば成功です。

図7:商品画面の表示
図7:商品画面の表示

まとめ

 Django の最初のステップ(モデル作成、HTML画面の表示)について駆け足で説明してきましたが、いかがでしたでしょうか。Djangoは、簡単に簡潔できれいなアプリケーションを書くための仕組みが数多く用意されていて、快適にアプリケーションを開発することができます。前編のチュートリアルだけでも、ひととおり動くWebアプリケーションが10分もあれば開発できることがご理解いただけたかのではないかと思います。後編では、モデルAPIや、その他Djangoが用意している便利な機能を使用して、アプリケーションを拡張していきます。

参考資料

修正履歴

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4065 2009/07/16 17:08

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング