2018年6月2日土曜日
ウズマスター戦記
ウズマスター戦記 https://www.uzumax.org/2018/06/djangohtml.html

DjangoでHTMLのテンプレートレンダリングを行う

Djangoの以下のチュートリアルページに準拠して開発していると、以下のページの段階で画面を表示することになります。


実装は以下のようになります。

from django.http import HttpResponse

def index(request):

    return HttpResponse("日本一平凡なDjango")

って、こんなべた書きでHTMLを出力するなんてありえませんので、テンプレートを使用したレンダリングエンジンを使ってMVCモデル化を進めていきましょう。


公式サイト

公式サイトでレンダリングの開設が初登場するのはこちら。




ここから大事な部分を抜き取って解説します。

テンプレートフォルダの作成
テンプレートファイルを置くため、最初にテンプレートフォルダを作成します。

「機能名 / templates / 機能名」というフォルダを作成して下さい。
当ブログのサンプルの場合「start_samples/templates/start_samples」になります。

ここの配下にhtmlファイルを置くことになります。


この時点で違和感を感じられる方も多いのでは無いでしょうか?
Djangoはテンプレートフォルダのフォルダ構成が冗長なんですよ。
templatesフォルダ直下にhtmlファイルを置いてはアカンのかと。

でも、これはNGです。

公式サイトにハッキリ書いてあります。Djangoでは、名前空間が被った場合にどっちがどちだか判定することが出来ません。

要するに、こういうことです。

start_samples
  L templates
  L index.html
start_samples2
  L templates
  L index.html

こういう風に別のアプリケーションと名前が被っちまうとどっちがどっちか判定することが出来なくて、違う機能のテンプレートファイルを取得しちまう、と。

こういうわけです。
だから「機能名 / templates / 機能名」という命名規約は絶対に守らなければなりません。

HTMLファイル

今回は疎通確認みたいなものなので、テンプレートの中身に変数とかは使わないで固定で以下にします。

templates/start_samples/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>日本一平凡なサンプル</title>
</head>
<body>
日本一平凡なテンプレート
</body>
</html>

views.pyとの結びつけ

views.pyには以下のように記述することで、viewsの処理とテンプレートファイルを結びつけてHTMLを出力することが出来ます。

views.py

from django.shortcuts import render

def render_index(request):

    return render(request, 'start_samples/index.html')


表示確認

これで作業は終わりです。いざ、画面を表示してみましょう。






無事に表示できました。


上手くいかない場合

Page not found

Page not foundが表示されて上手く行かない場合、それはurls.pyの設定が出来ていないんですよ。

一応、当ブログの設定を張っておきますが、プロジェクト固有の問題なのでよく確認して下さい。

urlpatterns = [
    path('', views.index, name='index'),
    path('render_index', views.render_index, name='render_index'),
]


TemplateDoesNotExist

TemplateDoesNotExistが表示されちゃった場合、テンプレートにパスが通っていないのでしょうね。
以下のページをご確認下さい。




バックナンバー




0 件のコメント:

コメントを投稿

お気軽にコメント下さい。