数学講師2852771 views
高校生物549842 views
ヒストリア284143 views
英語607877 views
高校化学2913383 views
りんご192546 views
MathPython491378 views
高校倫理1433119 views
小学算数1194618 views
小学社会308636 views
Help
Tools

English

Flask のテンプレートエンジン Jinja2 の基本

Flask は標準でテンプレートエンジン Jinja2 を採用している。HTML ファイルに Python の変数や制御構文を埋め込むことで、動的なページを生成できる。

テンプレートの基本

テンプレートファイルは templates ディレクトリに配置する。render_template 関数でテンプレートを呼び出し、変数を渡す。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

テンプレート側では {{ }} で変数を展開する。

<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

制御構文

Jinja2 では {% %} で制御構文を記述する。

{% if user %}
    <p>Welcome, {{ user.name }}!</p>
{% else %}
    <p>Please log in.</p>
{% endif %}

<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

iffor は必ず endifendfor で閉じる必要がある。

テンプレートの継承

共通レイアウトを親テンプレートとして定義し、子テンプレートで継承できる。

<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>
<!-- hello.html -->
{% extends "base.html" %}

{% block title %}Hello{% endblock %}

{% block content %}
<h1>Hello, {{ name }}!</h1>
{% endblock %}

{% block %} で定義した領域を子テンプレートで上書きする仕組みである。