2014-09-12 3 views
2

Flask-Script manager.command에서 현재 앱 인스턴스에 액세스하려고합니다.Flask-Script 현재 앱을 가져 오는 방법은 무엇입니까?

이 오류 출력 (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이 호출 가능함을 보여줍니다. 그건 내가 앱 인스턴스를 만드는 방식과 관련이있다.

응용 프로그램 - 플라스크 인스턴스, 또는 호출 플라스 크 인스턴스를 반환 :

docs from flask-script
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)에 응용 프로그램 매개 변수에 대해 말할 :이 패턴을 다음과 같은거야.

문서에 문제가 없으므로 전화를 걸면 편안합니다. :-) 게다가 나는 다른 사람들이 그렇게하는 것을 보았다.

하지만 이제는 주변 장치 명령을 추가하고 싶습니다. 앱을 괄호로 사용하게되면 잘못된 냄새가납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 : 몇 가지 실험을했습니다. 이것은 틀 렸습니다. 괄호를 추가하면 앱 인스턴스가 두 번째로 다시 만들어집니다.

답변

5

사용 flask.current_app

이 작동 :

import flask 

... other stuff ... 

    @manager.command 
    def my_function(): 
     x = flask.current_app.url_map 
     print "hi" 

내가 'overthunk'. :-)