cookiecutter-flaskを使用して、関連するすべてのファイル、テストなどのサブモジュールをsite
モデルにした、という新しいブループリント/サブモジュールを作成しました。テストは合格し、DB が作成され、動作しますが、入力しようとするとuser
flask run
flask shell
AttributeError: モジュール 'webapp.site' には属性 'models' がありません
プロジェクト構造とコードの関連部分は次のとおりです。
--- プロジェクトの構成 ---
├── assets
├── autoapp.py
├── webapp
│ ├── __init__.py
│ ├── app.py
│ ├── public
│ │ ├── __init__.py
│ │ ├── forms.py
│ │ └── views.py
│ ├── settings.py
│ ├── site
│ │ ├── __init__.py
│ │ ├── forms.py
│ │ ├── models.py
│ │ └── views.py
│ ├── static
│ ├── templates
│ ├── user
│ │ ├── __init__.py
│ │ ├── forms.py
│ │ ├── models.py
│ │ └── views.py
│ ├── utils.py
│ └── webpack
├── tests
--- webapp/__init__.py
"""Main application package."""
--- webapp/user/__init__.py ---
from . import views
--- webapp/site/__init__.py ---
from . import views
--- webapp/app.py ---
from webapp import site, user
...
def register_shellcontext(app):
"""Register shell context objects."""
def shell_context():
"""Shell context objects."""
print(dir(site))
return {
'db': db,
'User': user.models.User,
--> 'Site': site.models.Site,
}
--- エラー出力 --- AttributeError: モジュール 'webapp.site' には属性 'models' がありません
と入力しようとすると、エラー出力が表示されますflask shell
。user
モジュールは正常に動作しますが、barfs site
. Python REPL を開くfrom webapp import site
と、問題なく実行できsite.models
ます。インポートをに変更することもできますがapp.py
、from webapp.site.models import Site
それは機能しますが、他の方法が機能しない理由を知りたいです。site/__init__.py
また、 (機能しない)を空白にして、(機能する)にインポートmodels
しようとしましsite/__init__.py
た。
print(dir(site))
にインポートした直後にを追加するとapp.py
、
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'views']
ここで何が起こっているのか、なぜuser
うまくいかないのか途方に暮れていsite
ます。