python - Flask not finding routes in imported modules -
i'm having problem flask wherein routes declared in imported modules not registered , result in 404. running latest version flask on python 2.7.
i have following directory structure:
run.py has following code: flask import flask
app = flask(__name__) @app.route('/') def hello_world(): return 'hello world!' import views.home if __name__ == '__main__': app.run() home.py has following code:
from run import app @app.route('/test') def test(): return "test" when run run.py route declared in home.py (http://localhost:5000/test) returns 404 though run.py imports views.home. root view (http://localhost:5000) declared in run.py works fine.
i have written function prints out registered routes , /test not in there (get list of routes defined in app).
any idea why?
i have discovered switching import statement in run.py from
import views.home to
from views.home import * makes work, gave me clue why modules not being registered using import views.home.
basically, when run.py run script given name __main__ , name given module in sys.modules (importing modules: __main__ vs import module)
then when import app run.py in views.home.py new instance of run.py registered in sys.modules name run. point, reference app in run.py , views.home.py 2 different references hence routes not being registered.
the solution move creation of app variable out of run.py , in separate python file (i called web_app.py) imported run.py. guarantees flask app variable declared inside web_app.py referenced correctly wherever web_app.py imported.
so run.py looks this:
from web_app import app if __name__ == '__main__': app.run() and web_app.py looks this:
from flask import flask app = flask(__name__) import view.home
Comments
Post a Comment