另一个问题,为什么django看不到应用程序



我希望所有应用程序都在同一个共享的应用程序文件夹中。但是django设置不希望看到创建的应用程序。

我是如何创建应用的

  1. 在项目根目录中创建了一个空的应用程序文件夹
  2. 在其中创建了一个空的__init__.py文件
  3. 在应用程序文件夹中创建了一个空文件夹-creative_performer
  4. 运行命令python manage.py startapp creative_performer apps/creative_performer

得到以下结构

/gpanel
/projects
urls.py
settings.py
....
/apps
__init__.py
/creative_performer
/migrations
__init__.py
apps.py
models.py
....

管理员.py

设置.py

PROJECT_APPS = ['creative_performer']
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
] + PROJECT_APPS

但在服务器运行后得到

File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'creative_performer'

我还尝试过用命令创建一个应用程序

django-admin startapp creative_performer

相同的结果

如果在项目的根目录中创建一个应用程序,而不使用apps共享文件夹,则所有内容都开始工作

其他尝试将PROJECT_APPS更改为PROJECT_APPS = ['apps.creative_performer']

但得到

django.core.exceptions.ImproperlyConfigured: Cannot import 'creative_performer'. Check that 'apps.creative_performer.apps.CreativePerformerConfig.name' is correct.

但是CreativePerformerConfig.name == 'creative_performer',不清楚为什么会出现错误

p.S.

通过更改apps.py更改name = 'apps.creative_performer'解决

设置.py

PROJECT_APPS = ['apps.creative_performer']

但是,这是姜戈的正常行为吗?如果不更改默认设置,在共享文件夹中创建应用程序真的不可能吗?

Django的installed_apps使用Python的普通导入系统来定位已安装的应用程序。归根结底,重要的是:你的应用程序可以被定位和导入,这遵循python打包和导入语义。因此,对于您通过pip安装的大多数第三方应用程序,PYTHONPATH上已经可以作为顶级名称导入。

因为你的应用程序creative_performer实际上是apps下的一个子包,所以你需要在installed_apps中使用'apps.creative_performer',并将应用程序名称设置为相同才能在这种情况下使用它。

另一种选择是删除apps/__init__.py文件,并将apps目录添加到PYTHONPATH环境变量中(或修改sys.path(来处理此问题。这样,你的应用程序只是独立的软件包。但正确的做法可能是将其保留在'apps.creative_performer'中——例如,这与django在其contrib子包中所做的类似。一般来说,不鼓励修改你的蟒蛇路径。

另一种选择是将你的应用程序作为可重复使用的应用程序分发,并单独安装。

最新更新