我正在尝试从 Flask-Script manager.command 访问当前的应用程序实例。
这会出错(url_map 是 flask.app 的属性)
@manager.command
def my_function():
x = app.url_map # this fails, because app is a callable
print "hi"
这行得通,但我不喜欢在应用程序旁边添加括号。
@manager.command
def my_function():
x = app().url_map
print "hi"
调试器显示 app 是可调用的。这与我创建应用程序实例的方式有关。我正在遵循这种模式:
def create_app(settings=None, app_name=None, blueprints=None):
...lots of stuff...
app = flask.Flask(app_name)
...lots of stuff...
return app
def create_manager(app):
manager = Manager(app)
@manager.command
def my_function():
x = app.url_map
print "hi"
def main():
manager = create_manager(create_app)
manager.run()
if __name__ == "__main__":
main()
来自烧瓶脚本的文档说关于应用程序参数Manager(app)
:
app – Flask 实例,或可调用的返回 Flask 实例。
我很乐意在其中放置一个可调用对象,因为文档说没关系。:-) 另外,我见过其他人这样做。
但是现在我有这个我想添加的外围命令,它迫使我使用带有括号的应用程序,这闻起来很不对劲。我究竟做错了什么?
编辑:我做了一些实验。这绝对是错误的。通过添加括号,应用程序实例将第二次重新创建。