LoginSignup
0
0

More than 1 year has passed since last update.

Djangoでtemplatesファイルを使用してHTMLを表示する

Posted at

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についてもう少し書くことがある。
また、別の投稿で追加する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0