Djangoのページ表示の仕組み
今回はDjangoで自分の作ったプログラムを実行し、その結果をHTMLに表示させられるようにする。
Djangoでは下記画像の流れでページが生成され、表示される。
ページ作成のメイン部分はviews.pyで担っているため、
views.pyに自作のプログラムの値を渡すように設定すればよい。
実行したいPythonファイルの作成
プログラム設置用のディレクトリを作成
Djangoで実行したいPythonファイルを作成する。
今回Pythonファイルの設置場所はアプリである「ohlcv」ディレクトリの中に
「application」というディレクトリを作成してその中に作ることとする。
今回は以前に書いたWEBアプリ作成フローの記事が終わった時点でのフォルダを使用している。
実行したいプログラムを作成
今回は下記のような簡単なプログラムを用意した。
def sum():
a = 10
b = 20
x = a + b
return x
if __name__ == "__main__":
sum()
必要なモジュールはターミナルで新しくインストールする。
コンテナを再度作り直す可能性があるため、インストールしたモジュールは
「requirements.txt」にも追記しておく。
実装
views.pyの編集
プログラムが作れたら、次にviews.pyに作成したプログラムの実行結果を表示させる処理を行う。
- 「from .application import sample」でプログラムを読み込む
- 「def get_context_data(self, **kwargs):」でcontextデータに
「sample.sum()」の実行結果を追記する
from django.shortcuts import render
from django.views.generic import TemplateView
from requests import request
from .application import sample # 追加
class HomeView(TemplateView):
template_name = 'home.html'
def get_context_data(self, **kwargs): # 追加
x = sample.sum()
context = super().get_context_data(**kwargs)
context['sum'] = x
return context
Djangoは辞書型のcontextというデータをバックエンドに投げているため、
ページで表示させるためにはcontextのデータに追記していけばOK
クラスベースのViewを使用している場合、ベースとなっているClassが認識していないコードを記載しても実行されない。
class HomeView(TemplateView):
template_name = 'home.html'
print("このprintは実行されない")
home.htmlの編集
最後にページに実行結果が表示されるように編集する。
views.pyでの「def get_context_data(self, **kwargs):」の中で
context[‘sum’] = x と記載することにより
htmlファイル側で「{{ sum }}」と記載すれば「x」の値が表示されるようになる。
そのことを踏まえてhtmlファイルを編集する。
{% extends "base.html" %}
{% block content %}
<h1>Hello!</h1>
<p>合計:{{ sum }}</p>
{% endblock %}
実際にページを表示してみる
python3 manage.py runserver
でサーバー起動
ブラウザで「http://127.0.0.1:8000/home/」に接続。