我试图让我的app.route装饰器接受字典键作为参数,而不是单独写出每个函数。
from flask import Flask, render_template
app = Flask(__name__)
pages_dict = {"/url": "html_file.html", "/", "index.html"}
for k, v in pages_dict.items():
@app.route(key)
def render():
return render_template(v)
答案 0 :(得分:1)
您使用了,
逗号,您应该使用:
冒号:
pages_dict = {"url": "html_file", "/", "index.html"}
^
这很容易纠正为:
pages_dict = {"url": "html_file", "/": "index.html"}
@app.route()
装饰器注册端点,每个端点都必须具有唯一的名称。默认情况下,端点名称取自函数,因此如果要重用函数,则需要明确提供名称:
for k, v in pages_dict.items():
@app.route(k, endpoint=k)
def render():
return render_template(v)
你仍然会遇到关闭问题; v
中使用的render()
将被绑定到循环中的最后一个值。您可能希望将其作为参数传递给render()
而不是:
for k, v in pages_dict.items():
@app.route(k, endpoint=k)
def render(v=v):
return render_template(v)
这会将v
绑定为render()
中的本地,而不是将其关闭。有关详细信息,请参阅Local variables in Python nested functions。