概要
「Head First Python 第2版」を進めていった中で考えたことの記録です。
Head First Python 第2版 ―頭とからだで覚えるPythonの基本
- 作者: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にようこそ!」という文字列が設定されることになります。