ホーム >  Python > Django >  template使用のおさらい(Django)

投稿日:   |  最終更新日:

template使用のおさらい(Django)

DjangoPython

Djangoで簡単なviewを作成し、templateを使用して表示します。

Djangoのtemplate

Djangoのtemplateとは、htmlファイルです。viewのデータをtemplateのhtmlで受け取って表示します。tmplateは、以下のようにアプリケーションディレクトリの下のtmplateディレクトリへ設置します。

project/app/templates/app/

形式は一般的なhtmlとほぼ変わりません。htmlコードの中で「{{ var }}」のように中括弧2つで囲むとDjangoから渡された値を使用できます。また、「{% func %}」の形式でテンプレートタグと呼ばれる関数を実行することができます。

前提

  • 既にDjangoのプロジェクトを作成済み。
  • 投票アプリ用モデル(Choice、Question)作成済み。

準備

当サイトでは、Vagrantでゲスト環境(仮想環境)を作ってDjangoを動かいていますが、それ以外の環境でも操作方法はだいたい同じです。

①Djangoプロジェクトを生成します。

VagrantのDjangoで作るWebアプリケーション(その1 プロジェクト生成)

②Djangoアプリケーションを作ります。

VagrantのDjangoで作るWebアプリケーション(その2 プロジェクトの初期設定)

③投票アプリのモデルを定義します。

投票アプリを作る その1モデルの定義、管理サイトの表示(Django)

④urlのルーティングを設定し、Viewを作成します。

viewの作成とurlの接続・url関数のおさらい(Django)

環境

OS CentOS 7.1.1503
pyenv 1.1.3-5-g7dae197
Anaconda 3-4.3.0
MariaDB 5.5.52-1.el7
Apache 2.4.6
mod_wsgi 4.6.3
Django 2.0.3

テストアプリ概要

①以下のようなDjangoアプリ構成を作ります。プロジェクト名が「pj1」で、アプリケーション名が「users」です。プロジェクトの設定は済ませたものとします。赤字のファイルは、今回変更する部分です。

  • pj1/
  • pj1/
  • __init__.py
  • settings.py
  • urls.py
  • wsgi.py
  • users/
  • __init__.py
  • admin.py
  • apps.py
  • urls.py
  • views.py
  • models.py
  • templates/
  • polls/
  • index.html

templateの使用

①usersディレクトリのurls.pyに以下の記述をします。

from django.conf.urls import url

from . import views


urlpatterns = [
   url(r'^polls/$', views.index, name='index'),  # urlとviewの結びつけ
]

※前回の「viewの作成とurlの接続・url関数のおさらい(Django)」と同じです。

②pj1ディレクトリのurls.pyに以下の記述をします。

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url('admin/', admin.site.urls),
    url(r'^', include('users.urls', namespace = 'users'))  # urlと他のurlpatternsとの結びつけ
]

③usersディレクトリのviews.pyに以下の記述を追加します。

from django.shortcuts import render


def index(request):
    return render(request, 'polls/index.html')

render関数

requestとテンプレートパスを渡すと、そのテンプレートを使用したレンダリング結果をHttpResponseとして返します。

④templatesディレクトリ配下にpollsディレクトリを作成し、以下の内容のindex.htmlを作成します。

<html>
<body>
  <p>Hello, world. You're at the polls index.</p>
  <p>template version!</p>
</body>
</html>


⑤簡易サーバを起動します。

cd pj1
python manage.py runserver 0.0.0.0:8000

⑥ブラウザから「http://localhost:8000/polls/」にアクセスします。すると、以下のような結果がでます。


templateへの値渡し

ここまでで静的なページは作れるようになりました。次に動的ページを作ります。

①usersディレクトリのviews.pyに以下の記述を追加します。

from django.shortcuts import render


def index(request):
    return render(request, 'polls/index.html', {
        'hoge': 'test string',
        'fuga': '<br>tag</br>',
    })

renderメソッド

renderの第3引数にpythonの辞書を渡すことでtemplateに値を渡すことができます。template内で渡された値を使う場合は{「{ var }}」の形式で書きます。

②以下の内容のindex.htmlに記述します。

<html>
<body>
  <p>Hello, world. You're at the polls index.</p>
  <p>template version!</p>
  <p>{{ hoge }}</p>
  <p>{{ fuga }}</p>
</body>
</html>

③簡易サーバを起動します。

cd pj1
python manage.py runserver 0.0.0.0:8000

④ブラウザから「http://localhost:8000/polls/」にアクセスします。すると、以下のような結果がでます。

htmlタグをエスケープしない

fugaは<br>がエスケープされて出力されてしまっています。セキュリティ的には嬉しいですが,タグを出力したい場合があります。タグを出力する場合には、「django.utils.html.mark_safe関数」を使用します。この関数は文字列が安全であるという印をつけ、それ以上エスケープされないようにします。

from django.shortcuts import render
from django.utils.html import mark_safe

def index(request):
    return render(request, 'polls/index.html', {
        'hoge': 'test string',
        'fuga': '<br>tag</br>',
        'piyo': mark_safe('<br>tag</br>'),
    })


トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告