Djangoで新しいアプリケーションを作成したその続きとして書く。
そこまでは下のものを参考にする。
○templatesの役割
templateではユーザーからの要求に応じ動的にページを作成して返す機能を持っている。HTML、CSS、JSと同時にPythonのコードを埋め込むことでPythonで生成した値を画面上に出力することが出来る。
○Templateの使用
appディレクトリ内にtemplatesフォルダを作成した場合、appディレクトリ内のviews.pyに既にインポートされているrenderを用いて、下のように記述する。
#app/views.py
def index(request):
return render(request, 'app/index.html')
この記述があると、appディレクトリ内に作成した、appフォルダ内のindex.htmlがこの関数がURLを介して呼ばれた際呼び出される。templatesディレクトリ内にappフォルダを作成していない場合、app/は不要になる。
templatesディレクトリの場所をappディレクトリなどと同じ階層で管理する場合、プロジェクトディレクトリ内のsettings.pyに変更を加える必要がある。
#settings.py
BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
templatesディレクトリのpathをTEMPLATE_DIRとして定義して、同様にsettings.py内にあるTEMPLATESのDIRSの部分に変更を加えていく。
DIRSのリスト内に先程定めた、TEMPLATE_DIRを要素として入れる。
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [TEMPLATE_DIR,],
○templateに値を渡す。
views.pyのreturnのrenderの引数内にcontextとして、辞書型で渡したい値を投げることが出来る。変数やクラスなども渡すことが出来る。
def index(request):
val = "goodbye"
return render(request, 'template_app/index.html', context= {'value': val})
また、HTML内では2重の波括弧で囲うことでその値を表示することが出来る。
<h1>Index</h1>
<p>{{value}}</p>
また、クラス変数や辞書型の変数の値を取り出すときは
<p>名前:{{member.name}}</p>
クラス名.(Dot)変数名や、辞書名.(Dot)キーなどDotを挟めば良い。
Templateについてもう少し書くことがある。
また、別の投稿で追加する。