您实际上并没有在代码中创建一个保留以下值的闭包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__
如果没有提供其他)。否则,您的第二个视图将覆盖您的第一个视图。
您可能想查看 Flask 的基于类的视图- 它们可能更容易构建您正在寻找的动态(尽管闭包和类非常相似 [因为两者都是穷人的替代品])。