:の値を保持するクロージャをコードに実際に作成していません。name
view_func=lambda: name # <- points at the *symbol*, which holds the *last* value
# in the case of a loop
値を保持するには、値をクロージャーに渡す必要があります。
view_maker = lambda name: (lambda: name)
for name in ('/hi', '/bye'):
endpoint = name.replace("/", "")
app.add_url_rule(name, view_func=view_maker(name), endpoint=endpoint)
編集:さらに、を使用して関数を登録するたびにadd_url_rule
、を指定するendpoint
か、各関数が一意であることを確認する必要があります__name__
(Flaskはendpoint
、関数のから派生した、にキー設定された辞書にルートを実際に格納するため)__name__
他に提供されていない場合)。そうしないと、2番目のビューが最初のビューを上書きします。
Flaskのクラスベースのビューを調べたいと思うかもしれません-それらはあなたが探しているダイナミクスを構築するのをより簡単にするかもしれません(クロージャとクラスは非常に似ていますが[どちらも貧乏人の代わりになります])。