使用cookiecutter-flask,我创建了一个名为的新蓝图/子模块,该模块在所有相关文件、测试等的子模块site
之后建模。测试正在通过、数据库创建和工作,但是当我尝试进入时,我得到了user
flask run
flask shell
AttributeError:模块“webapp.site”没有属性“模型”
这是代码中的项目结构和相关位:
--- 项目结构 ---
├── 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
模块工作正常,但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))
在导入后立即添加 a app.py
,我会看到
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'views']
我不知道这里发生了什么以及为什么user
有效但没有site
。