概要
「Head First Python 第2版」を進めていった中で考えたことの記録です。
- 作者:Paul Barry
- 発売日: 2018/03/24
- メディア: 単行本(ソフトカバー)
Webアプリケーションのコード
from flask import Flask, render_template from vsearch import search4letters app = Flask(__name__) # ...略... @app.route('/entry') def entry_page() -> str: return render_template('entry.html', the_title='Web版のsearch4lettersにようこそ!') app.run()
コード各部分について解説
テンプレートエンジンを使うための関数をインポートする
from flask import Flask, render_template
FlaskによるWebアプリケーションでテンプレートエンジンを使う操作は、flaskライブラリのrender_template関数1に定義されています。Webアプリケーションに「テンプレートに基づいたHTMLを返す」という動作を実装するためには、同関数をインポートする必要があります。
というわけで、flaskライブラリからインポートする関数として、render_templateを新たに追加しています。Flaskクラスのほうは、基本的なWebアプリケーションを定義する段階で既にインポートしていたものです。
テンプレートとキーワード引数に基づき、HTMLを生成して返す関数を定義する
@app.route('/entry') def entry_page() -> str: return render_template('entry.html', the_title='Web版のsearch4lettersにようこそ!')
先程importしたflaskライブラリのrender_template関数を用いて、/entryというURLにアクセスした際に返されるHTMLの内容を定義しています。Webブラウザの利用者側から見た全体動作としては、「第1引数で与えたテンプレートの内容を元にして、内部でJinja2テンプレートエンジンを用い、キーワード引数の内容も含めたHTTPレスポンスボディ内容を返す2」という動作をします。
render_templateの第1引数であるentry.htmlの内容については、下記記事のうち、項「入力フォーム」に記載しています。ベーステンプレートであるbase.htmlは、entry.htmlの内部で呼び出されています。
render_templateのキーワード引数the_titleは、テンプレート中の以下の記述に対応するものです。
<title>{{ the_title }}</title>
↑ベーステンプレートbase.html中のtitle要素の中身
<h2>{{ the_title }}</h2>
↑入力フォームテンプレートentry.html中のh2要素の中身
キーワード引数the_titleが存在することにより、実際に生成されるHTMLのうち、上記2つの要素の内容には「Web版のsearch4lettersにようこそ!」という文字列が設定されることになります。