0

cookiecutter-flaskを使用して、関連するすべてのファイル、テストなどのサブモジュールをsiteモデルにした、という新しいブループリント/サブモジュールを作成しました。テストは合格し、DB が作成され、動作しますが、入力しようとするとuserflask runflask 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 shelluserモジュールは正常に動作しますが、barfs site. Python REPL を開くfrom webapp import siteと、問題なく実行できsite.modelsます。インポートをに変更することもできますがapp.pyfrom 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ます。

4

0 に答える 0