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

时间:2013-09-12 12:56:41

标签: python django django-admin django-urls

我正在编写一个简单的Django应用程序 - 例如,名为base - 它有一些模型。我正在使用Django的built-in admin site来操纵应用程序的数据。可以通过默认的^admin/网址格式访问管理员。

除了Django的默认INSTALLED_APPS(减去django.contrib.sites),base是我项目中唯一安装的应用。有没有办法从网址中删除base/,这样我只需使用base而不是/admin/model/等路径即可访问/admin/base/model/的模型?

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

2 个答案:

答案 0 :(得分:1)

如果您不想在网址中使用base,请不要将其放在那里。除非你特别要求它,否则它不在那里。只需创建没有该前缀的网址。

编辑道歉,我误解了您的问题:我认为您询问的是应用程序自己的观点,而不是管理员的子部分。

这很棘手。一种方法是使用钩子将URL添加到基础AdminSite as described in the docs。您可能需要从ModelAdmin.get_urls方法复制代码并对模型名称进行硬编码,因为没有办法自动执行此操作。

答案 1 :(得分:0)

自定义或覆盖默认的Django管理站点非常容易。这是Django documentation。以下是覆盖默认管理网站的示例。

在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'
    ...
]