DjangoはPythonにおける強力なWebアプリケーション作成ツールです。
さらにDjangoの中にはビューという定義があり、ビューを適切に設定することで、簡単にWebページを作成できます。
今回はこのビューにおいて、変数を渡す方法を解説していきます。
【Django】ビューでのモデルや変数のテンプレートへの渡し方
Djangoでビューを作成すると簡単にWebページが作成できます。
例えば、以下のような形です。
1 2 3 |
class hisView(ListView): template_name = 'his.html' queryset = Songs.objects.all() |
「template_name」で表示するhtmlファイルを、
querysetでDBから取ってきたデータを指定します。
これだけで、値をhtmlファイルに渡せていることになります。
ここまではいつもどおりのビューの定義ですね。
複数のモデルをビューからテンプレートに渡すには?
次に、複数のモデルを渡す場合です。
先ほどの例では「Songs」というモデルのみを渡していました。
ここで、例えば「Artists」というモデルも渡してみましょう。
これを行うには「get_context_data」を使用します。
例えば、以下のような形になります。
1 2 3 4 5 6 7 8 9 |
class hisView(ListView): """更新履歴""" template_name = 'his.html' queryset = Songs.objects.all() def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['Artists'] = Artists.objects.all() return context |
class内でdef宣言をすることで、複数のモデルを渡すことができます。
html内で渡したモデルを使用するには、context[‘変数’]の「変数」を使用します。
今回ならば、Artistsを使用します。
htmlファイルに「{{Artists}}」と記載すれば値を渡すことができます。
変数をビューからテンプレートに渡すには?
ついでにもう一つ。モデルではなく変数を渡す場合について。
Viewはデータベースとhtml、つまりバックエンドとフロントエンドを繋ぎます。
それゆえに、値に対して加工をすることが多いです。
ここで、例えば変数を渡す場合についても考えてみましょう。
今回のビューにおいて、変数「strexample = ‘1234567890’」を渡してみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
class hisView(ListView): """更新履歴""" template_name = 'his.html' queryset = Songs.objects.all() strexample = '1234567890' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['Artists'] = Artists.objects.all() context['strexample'] = self.strexample return context |
上記のようになります。
ポイントは「self」を付け加えることですね。
モデルに関してはビューの戦闘でimportしているはずです。
そのためget_context_data内でも使えます。
しかしclass内で新しく設定した変数はそのままではget_context_data内で使えません。
引数に指定されているselfを先頭に付けることを忘れないでください。
1 2 3 4 5 |
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['Artists'] = Artists.objects.all() context['strexample'] = '1234567890' return context |