2

我正在编写一个简单的 Django 应用程序——比如说,叫做base——它有几个模型。我正在使用 Django 的内置管理站点来操作应用程序的数据。管理员可通过默认^admin/URL 模式访问。

除了 Django 的默认值INSTALLED_APPS(减号django.contrib.sites)之外,base它是我项目中安装的唯一应用程序。有什么方法可以base/从 URL 中删除,这样我就可以base通过简单地使用路径来访问模型,例如/admin/model/而不是/admin/base/model/

理想情况下,我希望django.contrib.auth's 模型仍然可以通过/admin/auth/.

4

2 回答 2

1

如果你不想base在 URL 中,不要把它放在那里。除非您特别要求它存在,否则它不存在。只需创建没有该前缀的 URL。

编辑道歉,我误读了您的问题:我以为您是在询问您的应用程序自己的视图,而不是管理员的子部分。

这很棘手。一种方法是使用钩子将 URL 添加到基本 AdminSite ,如文档中所述。您可能需要从 ModelAdmin.get_urls 方法复制代码并对模型名称进行硬编码,因为无法自动执行此操作。

于 2013-09-12T13:19:20.803 回答
1

自定义或覆盖您的默认 Django 管理站点非常容易。这是关于此的Django 文档。以下是覆盖默认管理站点的示例。

在您的 Django 项目目录中创建一个admin.py(如果还没有的话)。子类化 AdminSite。

要从管理 URL 中删除“appname”,请覆盖该get_urls()函数:

# myproject/admin.py
from django.contrib import admin

class MyAdminSite(admin.AdminSite):
    def get_urls(self):
        urlpatterns = super().get_urls()
        for model, model_admin in self._registry.items():
            urlpatterns += [
                path('%s/' % (model._meta.model_name), include(model_admin.urls)),
            ]
        return urlpatterns

在您的项目目录中创建一个apps.py(如果还没有的话):

# myproject/admin.py
from django.contrib.admin.apps import AdminConfig

class MyAdminConfig(AdminConfig):
    default_site = 'myproject.admin.MyAdminSite'

在你的注册这个settings.py

INSTALLED_APPS = [
    ...
    'myproject.apps.MyAdminConfig',  # replaces 'django.contrib.admin'
    ...
]
于 2020-12-11T20:19:19.670 回答