Python Django admin:正在从单个应用程序项目的URL中删除应用程序名称

Python Django admin:正在从单个应用程序项目的URL中删除应用程序名称,python,django,django-admin,django-urls,Python,Django,Django Admin,Django Urls,我正在编写一个简单的Django应用程序,比如说,名为base,它有几个模型。我正在使用Django操作应用程序的数据。管理员可以通过默认的^admin/URL模式访问 除了Django默认的已安装的应用程序(减去Django.contrib.sites),base是我的项目中唯一安装的应用程序。有没有办法从URL中删除base/,这样我就可以通过使用/admin/model/等路径而不是/admin/base/model/来访问base的模型 我希望django.contrib.auth的模型

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

除了Django默认的
已安装的应用程序
(减去
Django.contrib.sites
),
base
是我的项目中唯一安装的应用程序。有没有办法从URL中删除
base/
,这样我就可以通过使用
/admin/model/
等路径而不是
/admin/base/model/
来访问
base
的模型


我希望
django.contrib.auth
的模型仍然可以通过
/admin/auth/
访问

如果你不想把
base
放在URL中,不要放在那里。除非你明确要求它在那里,否则它不会在那里。只需创建不带前缀的URL

编辑抱歉,我误读了你的问题:我以为你是在问你的应用程序自己的观点,而不是管理员的子部分


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

自定义或覆盖默认的Django管理站点非常容易。这是关于这个问题的答案。下面是覆盖默认管理站点的示例

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

要从管理员URL中删除“appname”,请覆盖
get\u url()
函数:

# 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
(如果还没有):

设置中注册此项。py

INSTALLED_APPS = [
    ...
    'myproject.apps.MyAdminConfig',  # replaces 'django.contrib.admin'
    ...
]

我假设管理员在其URLconf(如果有)中需要在应用程序模型之前输入应用程序名称-如果我删除了它,那么我只是使用
/model/
而没有在它之前输入应用程序名称,我显然会得到404。你是说我应该修改Django管理员的URLconf?有没有什么方法可以不用进入Python安装的
站点包
,就可以覆盖它?
INSTALLED_APPS = [
    ...
    'myproject.apps.MyAdminConfig',  # replaces 'django.contrib.admin'
    ...
]