1

我正在尝试添加一个自定义/覆盖的 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'

我没有任何其他应用程序,项目是我的根目录我将 admin_site.urls 而不是 admin.site.urls 添加到 urls.py,在 apps.py 中创建了一个自定义 AdminConfig,并将新的 AdminConfig 添加到已安装的应用程序中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 中)来自 err

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

我的文件夹结构:

管理.py

项目

  • 行政
  • 设置
  • 网址
  • 应用
  • 静止的
  • 模板
  • 迁移

工作目录

  • sqlite
  • 媒体

节点模块

语言环境

pipfile.lock

点文件

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 遇到任何问题?

4

1 回答 1

1

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

在我的情况下,以下帮助:

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

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

于 2021-04-13T19:21:33.897 回答