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: enter image description here 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

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -