【问题标题】:Importing from __init__ in Flask从 Flask 中的 __init__ 导入
【发布时间】:2017-03-07 03:09:46
【问题描述】:

我想从我的__init__ 文件中导入一个类。但是我没有成功导入它。这是我的目录结构

/fitBody_app
  /fitBody
    /static
    /templates
    __init__.py
    models.py
    views.py

run.py

这些是我的__init__.py 文件的所有导入:

import os

from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy
from wtforms import fields, widgets

from fitBody.views import my_app
from flask_bootstrap import Bootstrap

app = Flask(__name__)
db = SQLAlchemy(app)

这些是我在views.py 文件中的所有导入:

import bcrypt
from flask import flash, redirect, render_template, request, session, Blueprint, url_for
from fitBody.models import RegistrationForm
from fitBody.models import cursor, conn
from fitBody import db

my_app = Blueprint('fitBody', __name__)

<......>

当我尝试运行该文件时,这是我的回溯:

Traceback (most recent call last):
  File "/Users/kai/github-projects/fitBody_app/run.py", line 1, in <module>
    from fitBody import app
  File "/Users/kai/github-projects/fitBody_app/fitBody/__init__.py", line 9, in <module>
    from fitBody.views import fitBody
  File "/Users/kai/github-projects/fitBody_app/fitBody/views.py", line 8, in <module>
    from fitBody import db
ImportError: cannot import name 'db'

我原以为我是从同一个文件夹中导入的,所以可以像这样进行导入。

我将如何从__init__.py 文件中导入db 对象?

【问题讨论】:

  • 您似乎拥有fitBodyfitbody。其中一项有效,另一项无效。要么你有错字,要么你没有显示正确的文件结构
  • 我看到的是fitBody.views 而不是fitbody.views,那是怎么回事?
  • 顺便说一句,from fitBody import app 似乎工作正常
  • @cricket_007 是的,抱歉,这是一个错字。我还更新了回溯。我不小心发布了我的旧回溯。
  • from . import db 怎么样?

标签: python flask python-import


【解决方案1】:

因为views.py 使用db,所以import 语句应该在db 定义之后。或者为了更好的设计,将蓝图移动到另一个文件中,并将蓝图保留在该文件中:

#__init__.py
app = Flask(__name__)
db = SQLAlchemy(app)

from fitBody.views import my_app

【讨论】:

    【解决方案2】:

    它与从__init__.py 文件导入没有任何关系。您的views.py 正在从您的__init__.py 文件导入,而__init__.py 文件正在从您的views.py 导入,这是一个导入周期。我不确定你的models.py 是什么样子,但是你如何在models.py 中初始化db 并同时从__init__.pyviews.py 导入models.py

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2017-03-12
      • 2020-05-13
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多