我的应用布局
my_app
__init__.py
my_app
__init__.py
startup
create_app.py
create_users.py
common_settings.py
core
models.py
views.py
内部__init __。py
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__) # The WSGI compliant web application object
db = SQLAlchemy(app) # Setup Flask-SQLAlchemy
manager = Manager(app) # Setup Flask-Script
from my_app.startup.create_app import create_app
create_app()
create_app.py
from native_linguist_server import app, db
@app.before_first_request
def initialize_app_on_first_request():
""" Create users and roles tables on first HTTP request """
from .create_users import create_users
create_users()
def create_app(extra_config_settings={}):
app.config.from_envvar('ENV_SETTINGS_FILE')
# Load all blueprints with their manager commands, models and views
from my_app import core
return app
当我像这样运行我的应用并尝试在浏览器中加载view
时,我收到404
错误。
但是,如果我改变:
from my_app import core
到
from my_app.core import views
它工作正常。
有人可以向我解释这两个电话之间的区别吗?我原以为from my_app import core
也会导入views.py
,因此不存在问题。
谢谢。
答案 0 :(得分:1)
from my_app import core
将加载并执行my_app/core/__init__.py
(如果存在)。然后,您可以访问内部定义的任何标识符或导入__init__.py
。
from my_app.core import views
将加载并执行my_app/core/views.py
。然后,您可以访问内部定义的任何标识符或导入views.py
。
要获得您期望的行为,您需要在views
内导入__init__.py
:
from . import views