独立于应用程序的 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 路径