Django でテンプレートファイルを追加する

Python

前回の続きです。

Django でルーティングを介してビューを表示する
前回の続きです。半分は udemy 「【3日でできる】はじめての Django 入門」の内容の備忘録になります。デフォルトプロジェクトにアプリケーションを追加する以下のように「posts」というアプリケーションを追加します。(po...

ほぼ udemy 「【3日でできる】はじめての Django 入門」の内容の備忘録になります。

テンプレートファイルとは

前回まででは、View に該当する view.index 関数で、直接 HttpResponse 関数の引数に文字列を渡すことで Hello World していました。

今回は、View の中で直接データを生成するのではなく、外部に定義してあるテンプレートファイル(html)を読み込んで、ブラウザにページを返すようにします。
こうすることで、いわゆる MVC の View と Controller を分離できるようになると思います。(そしたら View に依存しない単体テストが作れるようになり、単体テストの生産性が上がりますよね)

イメージは以下の感じです。

Webブラウザルーティング(プロジェクト内)myfirstapp.urlsビュー(index)views.indexアクセス(ページリクエスト)リクエスト先のページを取得該当するページを返すルーティング(postsアプリ内)posts.urlsビューテンプレートファイルindex.htmlテンプレートファイル(html)の読み込み

テンプレートファイルという名前ですが、とりあえず html ファイルだと思って良いのかなと思っています。

テンプレートファイルの作成

Django の仕様上、テンプレートファイル(html)は、以下の構成にしないといけないらしいです。

# posts フォルダ以下の構成
C:.
├─ 一部省略
│
└─posts
    │  admin.py
    │  apps.py
    │  models.py
    │  tests.py
    │  urls.py
    │  views.py
    │  __init__.py
    │
    ├─migrations
    │     __init__.py
    │
    └─templates
       └─posts
               index.html

具体的に、アプリケーションフォルダの中に templateフォルダを作って、さらにその中にアプリケーション名のフォルダを作って、その中に html ファイルを入れる感じです。
わけわからないと思うので、今回の posts というアプリケーションを例にすると、以下の感じです。

posts/templates/posts/index.html
index.html の作成

とりあえず適当に以下のような index.html ファイルにします。

<!DOCTYPE html> <!--おまじない-->
<html lang = "ja-jp"> <!--日本語を表示するために必要-->
<haed>
    <title>THIS IS TITLE</title>
</haed>
<body>
    <h1>Hello World!!これは本文です</h1>
</body>
</html>
views.py の修正

index.html を読み込めるように修正します。

# posts\views.py

from django.shortcuts import render
from django.http import HttpResponse

# index というページを意味する関数
def index(request):
    # 今回はここをコメントアウト
    # return HttpResponse("Hello World! this is index.")

    # 代わりに、index.html を読み込むようにしている
    return render(request, 'posts/index.html')

# Create your views here.

プロジェクトを起動してみる

ブラウザにて http://127.0.0.1:8000/posts/ にアクセスし、posts アプリケーションの index ページを表示します。

ちゃんと index.html が読み込まれて表示されることが確認できました。

コメント

タイトルとURLをコピーしました