如何将dict键传递给烧瓶中的装饰器值?

时间:2015-11-19 10:51:49

标签: python dictionary flask decorator python-decorators

我试图让我的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)

1 个答案:

答案 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