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>

まとめ

とても簡単でした。データベースを作るほどでもない情報はこれで事足りそうです。やったね!