前回の続きです。
Django でルーティングを介してビューを表示する
前回の続きです。半分は udemy 「【3日でできる】はじめての Django 入門」の内容の備忘録になります。デフォルトプロジェクトにアプリケーションを追加する以下のように「posts」というアプリケーションを追加します。(po...
ほぼ udemy 「【3日でできる】はじめての Django 入門」の内容の備忘録になります。
テンプレートファイルとは
前回まででは、View に該当する view.index
関数で、直接 HttpResponse
関数の引数に文字列を渡すことで Hello World していました。
今回は、View の中で直接データを生成するのではなく、外部に定義してあるテンプレートファイル(html)を読み込んで、ブラウザにページを返すようにします。
こうすることで、いわゆる MVC の View と Controller を分離できるようになると思います。(そしたら View に依存しない単体テストが作れるようになり、単体テストの生産性が上がりますよね)
イメージは以下の感じです。
テンプレートファイルという名前ですが、とりあえず 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 が読み込まれて表示されることが確認できました。
コメント