LoginSignup
1
2

More than 1 year has passed since last update.

Flaskについてまとめ5 url_forで関数を使って 指定したEndpointの値を確認

Last updated at Posted at 2022-05-06

過去の記事はこちらです

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で指定したエンドポイントの値を確認できます

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2