今回はテンプレートに値を引き渡す回にします。第4回からの続きとなるので前回をご覧になっていない方はさらって見ておくとよいです。
テンプレートがあるのに毎回同じ内容しか表示できないのであれば、わざわざPython×Djangoを用いる必要はなく、静的なWEBサイトとしてhtmlを公開するだけで事足ります。
Python×Djangoを用いるメリットとしては今回取り上げるような値を渡すことにより表示を切り替えられることです。
実際はログインユーザーや検索条件により、DBからデータを抽出してそれを加工した上でテンプレートに引き渡す形になります。

スポンサーリンク

対象者

  • pythonに興味がある方
  • プログラミングを始めたい方
  • pythonでWEBアプリを作りたい方

開発環境

  • macbook 12inch
  • macOS Mojave バージョン10.14.4
  • VS Code バージョン1.34.0
  • Anaconda Navigator 1.9.7
  • python 3.7
  • Django 2.1.7

スクリーンショット 2019-05-23 3.09.26

テンプレートに値を引き渡す

【index.html側】値を受けるために{{変数}}を設定する

変数name1、age1、name2、age2を用いてテンプレートに値を受けられるようにhtmlを書き変えてみましょう。
第4回でindex.htmlを作成しましたがそれを修正しています。

・templates/helloworld/index.html

<!DOCTYPE html>
<html>
<head>
<title>基本的な表の作成</title>
</head>
<body>
  <p>2019/05/28時点</p>
 <table border="1">
    <tr>
      <th>名前</th>
      <th>年齢</th>
    </tr>
    <tr>
      <td>{{name1}}</td>
      <td>{{age1}}</td>
    </tr>
    <tr>
      <td>{{name2}}</td>
      <td>{{age2}}</td>
    </tr>
  </table>
</body>
</html>

【views.py】値を渡す

views.pyのメソッドにて値を渡すことができます。
indexメソッドにparameterを定義し、それをrenderメソッドの引数に配置します。
これでテンプレート側に値を渡すことができます。

・views.py

def index(request):
    # return HttpResponse('Hello World!')
    params = {
        'name1':'安倍',
        'age1':'64',
        'name2':'トランプ',
        'age2':'72',
    }
    return render(request, 'helloworld/index.html', params)

動作確認

次に作成したテンプレートを動作させてみます。手順は以下のとおりです。
1. ターミナルを開く(上記で使用したやつ)
2. cd django_app
3. python manage.py runserver →これでDjangoが起動してWEBサーバーとして機能する
4. ブラウザにて下記のように実行して安倍さんとトランプさんの名前と年齢のテーブルが表示されれば成功となる

http://localhost:8000/helloworld/

下図のように表示されれば成功です。
スクリーンショット 2019-05-28 12.51.17

まとめ

  • 値を引き渡すことでテンプレートの表現の自由度が上がる
  • テンプレートに切り替えた箇所を{{変数}}にする
  • renderメソッドで値をparameterとして渡すことが可能である