【发布时间】:2021-07-04 13:17:22
【问题描述】:
我正在尝试添加一个自定义/覆盖的 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'
我没有任何其他应用程序,项目是我的根目录 我在 urls.py 中添加了 admin_site.urls 而不是 admin.site.urls,在 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 ) 从错误
ImportError:模块“project.admin”未定义“NewAdminSite”属性/类
我的文件夹结构:
manage.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 遇到任何问题?
【问题讨论】:
-
我更正了 django 文档链接。我不明白你评论的结尾 - 我只是想覆盖 django.contrib.admin.AdminSite 的 index_template 属性,我没有在其他任何地方编写/定义它,我认为 admin.py 中的代码就足够了吗?
-
在最后一部分,我问的是你编写课程的文件名(你添加了这个
project/admin.py)。无论如何,一切看起来都很好......你可以将你的目录结构添加到问题中吗? -
我希望这就是您对文件夹结构的意思,但我认为我们在这里有一个误解:我认为以这种方式对 AdminSite 进行子类化并添加/覆盖我的属性/功能就足够了想要更改/添加 admin.py。我没有在其他任何地方定义它,我对 AdminSite 现在的状态完全满意,所以我认为以这种方式对其进行编码就足够了,并且如果 NewAdminSite 以这种方式继承自 AdminSite ,则 django 可以使用 AdminSite 中定义的任何函数。跨度>
-
我并不是说你需要做更多的事情。我要求目录结构以了解您从哪里得到错误。查看您的目录结构,一切看起来都很好。我只能说,也许还有其他一些
project.admin是从某个地方导入的,或者您的admin.py中可能实际上有类似del NewAdminSite的东西。 -
好的,我会调查的,非常感谢!
标签: python django importerror django-shop