Python 入門

ホーム > Django による Web 開発 > テンプレートの基礎

テンプレートの基礎

以前の例では、ビュー関数に文字列を直接埋め込んで HTML を返していました。 しかし、これは実用的な Web サイトを構築するには現実的ではありません。

Django ではテンプレートという仕組みによって、HTML によるビューをロジックから分離することが可能です。

ここでは、簡単なテンプレートを用意してそれを利用したページを表示してみましょう。

テンプレートの作成

次の内容を template1.html として C:\src\test\django\mysite\templates ディレクトリ内に保存します。

<html>
<body>
<h1>Hello, {{my_name}}!</h1>
</body>
</html>

この中にあるように {{}} で括られた箇所にデータが入ります。

ビューの作成

次のようにビュー関数を作成します。

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse

def mytemplat(request):
     t = get_template('template1.html')
     html = t.render(Context({'my_name': 'Keisuke'}))
     return HttpResponse(html)

ここではテンプレートを読み出して、そのテンプレートの my_name というパラメータに、 'Keisuke' という文字列を与えています。

URLconf の設定

通常通り URLconf を設定します。(基本的な設定は 「はじめての Django ページ」 等を参考にしてください)

from django.conf.urls.defaults import *
from mysite.views import mytemplate

urlpatterns = patterns('',
     ('^templatetest1/$', mytemplate)
)

テンプレートディレクトリの設定

Django がテンプレートを読み出す場所(ディレクトリ)は、設定ファイルに記述します。 settings.pyTEMPLATE_DIRS という値を設定することで行います。

今回は C:\src\test\django\mysite\templates というディレクトリを利用しますから、 TEMPLATE_DIRS は次のようになります。(バックスラッシュではなく、スラッシュでパスを書くことに注意してください。)

TEMPLATE_DIRS = (
     'C:/src/test/django/mysite/templates',
)

試してみよう

以上で準備はできました。開発サーバーを起動して、動作確認をしましょう。開発サーバーは次のコマンドで実行します。 特にテンプレートを利用するからといって、コマンドが変わるわけではありません。

> python manage.py runserver

ブラウザからアクセスすると、次のように表示されるはずです。

テンプレート内の {{ my_name }} という箇所が確かに、データに置き換わっていることがわかりますね。

Django のテンプレートの使い方 ~ 少し発展

上のビュー関数では、get_template でテンプレートを読み込んで、render でパラメータをセットし HTML データを取得する、というステップを行いました。 これはある程度決まりきったステップで、何度も同じコードを書くのは面倒なので、同様のことをするためのもっと簡便な方法があります。 詳細はまた別の機会に説明しますが、簡単に紹介だけしておきます。

次のように render_to_response を使って、上記と同様のことができます。

from django.shortcuts import render_to_response
from django.http import HttpResponse

def mytemplat(request):
     return render_to_response('template1.html', {'my_name': 'Keisuke'})

また、パラメータをセットする箇所については、locals() という関数を使って次のように記述できます。

from django.shortcuts import render_to_response
from django.http import HttpResponse

def mytemplat(request):
     my_name = 'Keisuke'
     return render_to_response('template1.html', locals())
ホーム > Django による Web 開発 > テンプレートの基礎