過去の記事はこちらです
ubuntu でpython仮想環境を利用し
アプリケーションルートがflaskbook
になるように変化しました
その後テンプレートエンジンを利用しました
テンプレートエンジンはテンプレートと呼ばれる ひな形
と データを合成して成果ドキュメントを出力するソフトウェアです
テンプレートエンジンの if と for文 の使い方について記載していきます
変数の値を出力する
変数の値を表示するには{{ }}を使います
render_templateの第2引数以降で
設定したキーワード引数または辞書オブジェクトで指定した
変数名が利用できます
Flaskのテンプレートエンジンは、Jinja2です
Jinja2では、{% set %}ブロックを使用することで、クライアントサイドで変数を定義したり、サーバーサイドから受け取った変数を再定義することが出来ます。
{% set 変数 = 値 %}
条件式if文を利用する
条件式if文を利用するには{% %}を使います
右のように
テンプレート内でif文を利用するには、以下のように記述すればよいです
ifで条件を記述する
{% if color == 'red' %}<# colorがredかどうか #>
colorはredです
{% elif color == 'blue' %}colorはblueです
{% elif color == 'yellow' %}colorはyellowです
{% else %}colorはその他の色です
{% endif %}
繰り返しfor文の使い方
繰り返しfor文を利用するときも if文のように{% %}を使います
Fraskに標準で装備されているJinja2テンプレートエンジンを使用した場合
htmlの中に for文を書くことができます
{% for 変数 in 繰り返す範囲 %}
繰り返す内容
{% endofor %}
{% %}と{% endfor %}
を使用することで、htmlにfor文を書くことができます
EndpointのURLに url_for関数を使う
Endpointは通常は、APIにアクセスするためのURI のことを指します
FlaskではURIと紐付けられた関数名または関数につけた名前 のことを指します
EndpointのURLを利用するには
url_for関数を使うと便利です
通常、HTMLファイルやViewファイルに記述しているURLを変更する必要がなくなります
app.py
# flask クラスをimport
from statistics import mean
from flask import Flask, render_template, url_for
# Flask クラスをインスタンス化する
app = Flask(__name__)
# URLと実行する関数をマッピングする
@app.route("/")
def index():
return "Hello, Flask book like CEML"
# ルーティング
@app.route("/hello/<name>", methods=["GET"], endpoint="hello-endpoint")
# endpoint を指定しない場合は 関数名がendpoint 名となる
# 許可するHTTPメソッドをGETとPOSTにする場合
# methods=["GET","POST"]となる
def hello(name):
# python3.6から導入されたf-stringで文字列を定義
return f"Hello world,{name}!!!!!"
def hello_world():
return "Hello world"
# show_name エンドポイントを作成する
@app.route("/name/<name>")
def show_name(name):
# 変数をテンプレートエンジンに渡す
return render_template("index.html", name=name)
with app.test_request_context():
# /
print(url_for("index"))
# /hello/world
print(url_for("hello-endpoint", name="world"))
# /name/ichiro?page=ichiro
print(url_for("show_name", name="ichiro", page="1"))
flask run コマンドを実行すると
url_forで指定したエンドポイントの値を確認できます