【Python】第8章第4回:HTMLとPythonの連携
本記事では、Pythonを使ってHTMLテンプレートを活用する方法を学びます。Flaskフレームワークを使用して、Webアプリケーションに動的なHTMLを組み込む手法を解説します。
0. 記事の概要
この記事を読むメリット
- HTMLテンプレートの使い方を習得:PythonコードとHTMLを組み合わせた動的なWebページの作成が可能になります。
- Flaskを応用したWeb開発に挑戦:テンプレートエンジンの活用法を学べます。
- 柔軟なWebアプリケーション構築が可能:ユーザーの入力に応じたコンテンツ生成が簡単になります。
この記事で学べること
- HTMLとPythonを連携させる基本的な方法
- Flaskのテンプレートエンジン(Jinja2)の使い方
- 動的Webページの作成手順
1. HTMLとPythonの連携の概要
1.1 HTMLとPythonの役割分担
HTMLはWebページの構造を定義し、Pythonはその中で動的なデータを処理して埋め込みます。この組み合わせにより、以下のような機能が実現できます。
- データベースの内容を動的に表示
- フォーム入力に応じた結果の表示
- 条件に応じたHTML要素の変更
1.2 Flaskのテンプレートエンジン
FlaskはJinja2というテンプレートエンジンを使用して、HTMLテンプレートに動的なデータを埋め込みます。
2. FlaskでHTMLをレンダリング
2.1 HTMLファイルの作成
# templates/home.htmlの内容
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>FlaskとHTML</title>
</head>
<body>
<h1>こんにちは、{{ name }}さん!</h1>
</body>
</html>
2.2 Flaskコードでレンダリング
# app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def home():
return render_template("home.html", name="太郎")
if __name__ == "__main__":
app.run(debug=True)
動作解説
- HTMLテンプレート: ファイルにプレースホルダー({{ name }})を設置。
- render_template: HTMLテンプレートにデータを埋め込み、レンダリング。
- Flaskアプリ: ローカルサーバーでHTMLを動的に表示。
3. 実践例: 動的なWebページ作成
3.1 入力フォームの作成
# templates/form.htmlの内容
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ユーザー入力フォーム</title>
</head>
<body>
<form method="POST">
<label for="name">お名前:</label>
<input type="text" id="name" name="name">
<button type="submit">送信</button>
</form>
</body>
</html>
3.2 フォームデータの受け取り
# app.py
from flask import Flask, request, render_template
@app.route("/form", methods=["GET", "POST"])
def form():
if request.method == "POST":
name = request.form["name"]
return render_template("home.html", name=name)
return render_template("form.html")
if __name__ == "__main__":
app.run(debug=True)
動作解説
- フォーム作成: ユーザー入力を受け取るHTMLを構築。
- POSTリクエスト: Flaskでデータを受信し、テンプレートに渡します。
4. 練習問題
以下の課題に挑戦してみましょう。
- 年齢を入力するフォームを追加し、年齢を表示してください。
- フォームにバリデーションを追加して、空欄の場合にエラーメッセージを表示してください。
- 複数のデータをリスト形式でHTMLに表示してください。
5. 練習問題の解答と解説
問1の解答例
# 年齢フォームの追加
@app.route("/form", methods=["GET", "POST"])
def form():
if request.method == "POST":
name = request.form["name"]
age = request.form["age"]
return f"<h1>こんにちは、{name}さん!あなたは{age}歳ですね。</h1>"
return '''
<form method="POST">
お名前: <input type="text" name="name"><br>
年齢: <input type="text" name="age"><br>
<button type="submit">送信</button>
</form>
'''
6. まとめ
本記事では、HTMLとPythonの連携方法を学びました。Flaskを活用して動的なWebページを構築し、より高度なWebアプリケーションを目指しましょう!