代码之家  ›  专栏  ›  技术社区  ›  Diana

未正确导入的烧瓶模型

  •  1
  • Diana  · 技术社区  · 6 年前

    我有一个烧瓶SQL炼金术项目。到目前为止,这是我的结构:

    app
      |__ module1
      |    |__ models.py
      |    |__ views.py
      |__ module2
      |    |__ models.py
      |    |__ views.py
      |__ app.py
      |__ config.py
    

    models.py ,我有这个:

    from app import db
    
    #classes
    

    views.py ,我有这个:

    from module1.models import *
    from module2.models import *
    from app import app
    from flask import session, request, render_template, url_for, redirect
    import datetime
    
    #views
    

    这是我的 app.py 文件:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import os
    
    app = Flask(__name__)
    db = SQLAlchemy(app)
    
    from module1.views import *
    from module2.views import *
    
    import config
    
    def init():
        port = int(os.environ.get('PORT', 5000))
        app.run(host='0.0.0.0', port=port, debug=True)
    
    if __name__ == "__main__":
        init()
    

    当我在模块1上时。视图,并从模块2中调用模型。模特,完美的作品。但是当从module1调用模型时。模块1上的模型。在视图中,我得到一个名称错误:

    module1.models, module1.views --> Works
    module1.models, module2.views --> Works
    module2.models, module1.views --> Name Error
    module2.models, module2.views --> Works
    

    而且,导入过程很顺利,没有错误。当我给班级打电话时,它失败了。我认为imports语句有问题,但我不知道如何解决。有什么想法吗?

    提前谢谢你们

    1 回复  |  直到 6 年前
        1
  •  0
  •   Spencer Post    6 年前

    你可能需要一个初始化。每个子目录中的py文件 https://docs.python.org/3/tutorial/modules.html#packages .

    这个答案中还有更多信息可能会有所帮助 What is __init__.py for?

    此外,根据视图之间共享模型功能的方式,使用如下目录结构可能更有意义

    .
    ├── models
    │   ├── models1.py
    │   └── models2.py
    └── views
        ├── view1.py
        └── view2.py