- 概述:
settings.py文件中的INSTALLED_APPS中添加自定义子应用时,需要将子应用所在目录加入导报路径sys.path(如果子应用本身就在项目根路径下就不需要)。要么就要设置子应用的配置类的name值带上导包路径。 - 相关报错:
django.core.exceptions.ImproperlyConfigured: Cannot import ‘users’. Check that ‘meiduo_project.apps.users.apps.UsersConfig.name’ is correct. - 报错原因:
以下是引起报错的源码:(位于*\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。
. 解决办法
有两种:
附加导包路径,将子应用所在目录加入项目导包路径,这样可以在INSTALLED_APPS中直接写子应用名字。
# 写在项目配置文件中即可
import sys
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
2、更改apps.py中配置类的name属性,使之能够被正确导入
class UsersConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'meiduo_project.apps.users' # 必须符合导包路径