独立于应用程序的 django admin 上的新 URL

Posted

技术标签:

【中文标题】独立于应用程序的 django admin 上的新 URL【英文标题】:New URL on django admin independent of the apps 【发布时间】:2012-07-02 13:14:00 【问题描述】:

我正在使用 django 1.4 和 Python 2.7。

我只有一个简单的要求,我必须向 django 管理应用程序添加一个新 URL。我知道如何添加自定义应用程序的 URL,但无法弄清楚如何添加管理应用程序的 URL。请指导我完成此操作。

基本上完整的 URL 应该类似于 admin/my_url

更新

我想要一种方法,之后我也可以使用 admin 反向映射 URL。

【问题讨论】:

【参考方案1】:

Jingo 对您最初问题的回答 +1。考虑到您对答案的澄清评论: 这样的 URL 不是“独立于应用程序”,它是应用程序“管理员”的 URL。

将 URL 添加到管理站点类似于 ModelAdmin,通过覆盖 get_urls(): https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-views-to-admin-sites

编辑:

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.AdminSite

是一个管理站点,默认情况下,“该”管理站点被实例化为“django.contrib.admin.site”(然后,例如,您的 ModelAdmin 会针对该站点进行注册)。因此,您可以为自己的 MyAdminSite 子类化 AdminSite 并在那里重新定义 get_urls():

from django.contrib.admin import AdminSite

class MyAdminSite(AdminSite):
    def get_urls():
        ...


...
my_admin_site = MyAdminSite()
...
my_admin_site.register(MyModel, MyModelAdmin)

请确保您现在在 urls.py 中使用 my_admin_site: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf

关于 get_urls() 的实际内容,见 https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls (当然是调用 MyAdminSite 的 super())。还要注意那里提到的方便的“admin_view”包装器。

PS:理论上,您也可以只定义 get_urls() ,然后猴子补丁默认管理站点,以便它使用您的 get_urls() 但我不知道这是否真的有效 - 你可能不得不猴子补丁在其“第一次”导入之后...

【讨论】:

我很抱歉用错了词。我其实想要这个。但是,您能否简要介绍一下执行此操作所涉及的步骤?或者一个例子?【参考方案2】:

只需将所需的 url 映射放在根 urls.py 中的管理映射之前。将获取请求的第一个匹配项,因为 django 从上到下进行 url 映射。请记住,您不要使用管理员通常需要或提供的 url,因为这永远不会与它前面的自定义映射匹配。 HTH!

【讨论】:

这是一个可能的解决方案。但是,它不会将该 URL 注册为管理员 URL(就像模型 URL 的情况一样)。这是我网站的另一个 URL,我在 Django 自己的 URL 之前定义并提供它。我想要一种方法,之后我也可以使用 admin 反向映射 URL。

以上是关于独立于应用程序的 django admin 上的新 URL的主要内容,如果未能解决你的问题,请参考以下文章

EC2 Amazon Beanstalk 上的 django-admin.py 和 python 路径

自定义django-admin命令

自定义django-admin命令

从独立的python脚本访问postgresql上的django数据库

Django:独立于应用程序的读取和写入的多个数据库

更改列表页面上的 django admin 附加字段