NameError: name 'app' is not defined with Flask

11,212

After do what Miguel suggest (use the Blueprint) everything works, that's the final code, working:

_init.py_

...

def create_app(cfg=None):
    app = Flask(__name__)
    from api.views import api
    app.register_blueprint(api)
    return app

views.py

from flask import current_app, Blueprint, jsonify
api = Blueprint('api', __name__)

@api.route("/")
def index():
     # We can use "current_app" to have access to our "app" object
     return "Hello World!"
Share:
11,212
zot24
Author by

zot24

Updated on June 04, 2022

Comments

  • zot24
    zot24 about 2 years

    I have the following structure in my project

    \ myapp
        \ app
           __init__.py
           views.py
        run.py
    

    And the following code:

    run.py

    from app import create_app
    
    if __name__ == '__main__':
        app = create_app()
        app.run(debug=True, host='0.0.0.0', port=5001)
    

    views.py

    @app.route("/")
    def index():
        return "Hello World!"
    

    _init_.py

    from flask import Flask
    
    
    def create_app():
        app = Flask(__name__)
        from app import views
        return app
    

    I'm trying to use the factory design pattern to create my app objects with different config files each time, and with a subdomain dispatcher be able to create and route different objects depending on the subdomain on the user request.

    I'm following the Flask documentation where they talk about, all of this:

    But I couldn't make it work, it seems that with my actual project structure there are no way to pass throw the app object to my views.py and it throw and NameError

    NameError: name 'app' is not defined