views.pyの変数値をDjangoのテンプレートに渡す方法
|
Webページのタイトルや内容はページ毎に異なる内容となるため、値をデータベースから拾ってきたり、変数を定義する必要があるかと思います。
この記事ではviews.pyに設定した変数をテンプレートに渡す基本的な方法をまとめました。
次のようなディレクトリ構造でurls.pyなどルーティング設定は終わっている状態。そこからindex.htmlに変数を渡す設定を追加する。という想定で話を進めます。
.
├── hello
│ ├── __init__.py
│ ├── __pycache__
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── hello_app
│ ├── __init__.py
│ ├── __pycache__
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── static
│ ├── templates
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── manage.py
└── static
├── admin
└── css
ルーティングの設定についてはこちらの記事をご覧ください。↓
https://hodalog.com/django-view-and-url/
views.pyに変数を設定
index.htmlをレンダリングしている関数に辞書型のオブジェクトを作り、そこに渡したい変数を用意します。
def index(request):
params = { # <- 渡したい変数を辞書型オブジェクトに格納
'title': 'Hi Django!',
'subtitle': 'This is my 1st Django app.',
}
return render(request, 'hello/index.html', params) # <- 引数にparamsを追記
このparamsオブジェクトは dictionary-type(辞書型)と呼ばれるPythonの記法で、Rubyでいうところのハッシュ、PHPの連想配列に相当するオブジェクトです。
render関数の3つ目の引数にこのオブジェクトを指定することで、index.htmlに渡すことができます。
index.htmlに渡した変数を表示させる
テンプレート側で変数を表示するには次のように、paramsで設定したキーを使います。
<h1 class="title">
{{title}}
</h1>
<p class="subtitle">
{{subtitle}}
</p>
まとめ
とても簡単でした。データベースを作るほどでもない情報はこれで事足りそうです。やったね!