Django: django.core.exceptions.ImproperlyConfigured: Cannot import 'app1'. Check that 'test_django.apps.app1.apps.App1Config.name' is correct.Django: django.core.exceptions.ImproperlyConfigured: Cannot import 'app1'. Check that 'test_django.apps.app1.apps.App1Config.name' is correct.Django: django.core.exceptions.ImproperlyConfigured: Cannot import 'app1'. Check that 'test_django.apps.app1.apps.App1Config.name' is correct.Django: django.core.exceptions.ImproperlyConfigured: Cannot import 'app1'. Check that 'test_django.apps.app1.apps.App1Config.name' is correct.
  • 首页
  • 博客
  • 文件
  • 书签
  • 分析
  • 登录
Search
Generic filters

Django: django.core.exceptions.ImproperlyConfigured: Cannot import 'app1'. Check that 'test_django.apps.app1.apps.App1Config.name' is correct.

Published by admin at 2022年8月20日
Categories
  • Django
Tags

1. 概述:

Django settings.py文件中的INSTALLED_APPS中添加自定义子应用时,需要将子应用所在目录加入导报路径sys.path(如果子应用本身就在项目根路径下就不需要)。要么就要设置子应用的配置类的name值带上导包路径。

Django目录结构:
test_project
    ├── LICENSE
    ├── main.py
    └── test_django
        ├── db.sqlite3
        ├── manage.py
        └── test_django
            ├── apps
            │   └── app1
            │       ├── admin.py
            │       ├── apps.py
            │       ├── __init__.py
            │       ├── migrations
            │       │   └── __init__.py
            │       ├── models.py
            │       ├── tests.py
            │       └── views.py
            ├── asgi.py
            ├── __init__.py
            ├── settings.py
            ├── urls.py
            └── wsgi.py
执行命令:
/home/ubuntu/PycharmProjects/test_project/test_django/manage.py runserver

2. 相关报错:

django.core.exceptions.ImproperlyConfigured: Cannot import 'app1'. Check that 'test_django.apps.app1.apps.App1Config.name' is correct.

3. 报错原因:

以下是引起报错的源码:(位于*\site-packages\django\apps\config.py)

	  if app_name is None:
	            try:
	                app_name = app_config_class.name
	            except AttributeError:
	                raise ImproperlyConfigured(
	                    "'%s' must supply a name attribute." % entry
	                ) 
		# Ensure app_name points to a valid module.
      try:
          app_module = import_module(app_name)
      except ImportError:
          raise ImproperlyConfigured(
              "Cannot import '%s'. Check that '%s.%s.name' is correct." % (
                  app_name,
                  app_config_class.__module__,
                  app_config_class.__qualname__,
              )
          )

上面的app_config_class就是应用内的apps.py中的Config类,这段程序实际上会以该类的name属性作为导包路径进行导包,因此如果这个name显示的路径与sys.path脱离的话就会报错ImproerlyConfigured。

4. 解决办法

有两种:

方法1. 附加导包路径,将子应用所在目录加入项目导包路径,这样可以在INSTALLED_APPS中直接写子应用名字。
# 写在项目settings.py文件中即可
# 添加导包路径
import sys
import os

sys.path.insert(0, os.path.join(BASE_DIR, 'test_django/apps'))
# 注册子应用
# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1'
]
方法2. 更改test_django/test_django/apps/app1/apps.py中配置类的name属性,使之能够被正确导入。
# test_django/test_django/apps/app1/apps.py
from django.apps import AppConfig

class App1Config(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'test_django.apps.app1'
# 注册子应用
# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'test_django.apps.app1'
]

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Categories

  • 猫
  • Python
  • MySQL
  • Django
  • Html/CSS
  • JavaScript
  • Vue
  • RegExp
  • php
  • Practice
  • Virtualization
  • Linux
  • Windows
  • Android
  • NAS
  • Software
  • Hardware
  • Network
  • Router
  • Office
  • WordPress
  • SEO
  • English
  • Games
  • Recipes
  • living
  • Memorandum
  • Essays
  • 未分类

归档

©2015-2022 Alaica Blog support@alaica.com