Django ImportError:模块没有定义属性/类

问题描述

我正在尝试添加自定义/覆盖的 AdminSite,因为我需要一个不同的 Admin 模板。我按照文档说的做了所有事情: https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#overriding-the-default-admin-site

项目/admin.py

from django.contrib.admin import AdminSite 

class NewAdminSite(AdminSite):
    index_template = 'admin/index.html'
    site_header = 'Administration'

admin_site = NewAdminSite(name='newadmin')

项目/apps.py

class NewAdminConfig(AdminConfig):
    default_site = 'project.admin.NewAdminSite'

我没有任何其他应用程序,项目是我的根目录 ofc 我在 urls.py 中添加了 admin_site.urls 而不是 admin.site.urls,在 apps.py 中创建了一个自定义的 AdminConfig,并将新的 AdminConfig 添加到已安装的 Apps 而不是 django.contrib.admin。

问题是我现在收到了:

AdminSiteClass = import_string(apps.get_app_config('admin').default_site)

文件“C:\Users\User.virtualenvs\ssccms-fGQRLLK4\lib\site-packages\django\utils\module_loading.py”,第 24 行,在 import_string 中 ) 来自错误

ImportError:模块“project.admin”没有定义“NewAdminSite”属性/类

我的文件夹结构:

manage.py

项目

  • 管理员
  • 设置
  • 网址
  • 应用
  • 静态
  • 模板
  • 迁移

工作目录

  • sqlite
  • 媒体

节点模块

语言环境

pipfile.lock

pip文件

wsgi

希望这对文件夹结构来说足够了,它是django-shop cookiecutter 项目示例结构

编辑:

是的,这绝对是一个循环导入错误。我现在的解决方法是简单地使用给定的 admin.site 写:

admin.site.index_template = 'admin/newadminindextemplate.html'

它有效!这实际上就是我想要的。但文档说明如下 https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#root-and-login-templates

如果您希望更改索引、登录或注销模板,最好创建自己的 AdminSite 实例。

我试过了:

https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#customizing-the-adminsite-class

而不是我粘贴在问题的第一个链接中的覆盖部分,但现在有

django.urls.exceptions.noreverseMatch:未找到“cascade_texteditor_config”的反转。 'cascade_texteditor_config' 不是有效的视图函数或模式名称

现在我的新问题是:

是否有必要创建自己的索引模板实例?文档说没有解释,所以我以后做 admin.site.index_template 可能会遇到什么问题吗?

解决方法

我刚刚遇到了类似的错误。这有点令人困惑,就我而言,这是由于循环导入。

就我而言,以下内容有所帮助:

  • 将包含 NewAdminSite 类的文件顶部的导入转换为本地导入(在需要它们的函数内部
  • admin_site 变量的实例化移动到单独的文件中

这些问题实际上在您粘贴的代码中均不可见,但可能会让您知道要查找什么。