6.Flaskでテンプレートの共通部分を分割する方法

ある程度複雑なアプリケーションでは複数のWebページを必要とするため、テンプレートファイルも複数用意することになります。これらをすべて直書きしていてはメンテナンスが大変ですが、Flaskのテンプレートエンジンでは共通部分を分割して管理することができます。

目次

共通テンプレートの作成

Webページのテンプレートにはヘッダー部分やナビゲーション、サイドバー、フッターなどすべてのページ、あるいは多くのページに共通する部分がいくつもあります。

これらの共通部分を分割して管理できれば、ヘッダー部分を少しだけ変えたい、といったメンテナンスが非常に楽になります。

実際にやってみましょう。

まずは templates フォルダにテンプレートファイル(index.html)をコピーした layout.html というファイルを作成します。

layout.htmlを作成

この layout.html を共通テンプレートにしましょう。

次のように記述します。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Flaskを使ってみよう!</title>
  </head>
  <body>
    {% block content %}
    {% endblock %}
  </body>
</html>

この block content の部分に別途作成した個別テンプレートの内容をはめ込むことができます。

共通テンプレートを呼び出し

次に個別テンプレート側に、共通テンプレートの内容を呼び出す処理を記述します。

index.html に次のように記述します。

{% extends "layout.html" %} <!-- 共通テンプレートの呼び出し -->

{% block content %}
  <h1>トップページです</h1>
  <p>なんとここはトップページなのです</p>
{% endblock %}

1行目の {% extends “layout.html” %} で共通テンプレート(layout.html)を呼び出しています。

そして3行目の block content から6行目の endblock で挟んだ部分が layout.html の block content と記述した部分で呼び出されます。

ではflaskコマンドを使ってアプリケーションを実行し、ブラウザで確認してみましょう。

トップページ(http://127.0.0.1:5000/)にアクセスします。

トップページ

1つのファイルで管理していた時と同じように、テンプレートの中身が表示できています。

共通テンプレートの活用

ここまでだと1つのページしか作成していないので、テンプレートを分割するメリットがいまいちわかりません。

むしろファイルを2つ作らないといけないぶん面倒だと感じたかもしれません。

そこで共通テンプレートを活用してもう1つ個別テンプレートを作ってみましょう。

まずhello.py に次のように記述します。

from flask import Flask, render_template

app = Flask(__name__)

# ルートディレクトリのURLをトリガーに
@app.route("/")
def index():
    # index.htmlファイルをテンプレートとして呼び出す
    return render_template("index.html")

# /aboutのURL
@app.route("/about")
def about():
    # about.htmlファイルをテンプレートとして呼び出す
    return render_template("about.html")

/about のURLにアクセスした時に about.html 内容を出力するよう記述しました。

次に、/templates の下に about.html を作成しましょう。

about.html を作成

次のように記述します。

{%extends "layout.html" %} <!-- 共通テンプレートの呼び出し -->

{% block content %}
  <h1>About Us</h1>
  <p>なんと我々についての紹介ページなのです</p>
{% endblock %}

こちらのページでも html の宣言をしたり、言語や文字コードの記述は同じなので、共通テンプレートを使いまわすことができます。

このように共通部分は {%extends “layout.html” %} の1行を書くだけでいいので、新しくページを作る際に簡単に使いまわせます。

もし共通部分を変更したくなった時も修正が必要になるのは layout.html ファイル1つだけなのでメンテナンスも簡単です。

flaskコマンドを使ってアプリケーションを実行し、ブラウザで確認してみましょう。

http://127.0.0.1:5000/about にアクセスします。

紹介ページ

こちらも共通テンプレートの内容が使いまわされて問題なく表示されています。

このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。