我正在使用 django 1.4 和 Python 2.7。
我只有一个简单的要求,我必须向 django 管理应用程序添加一个新 URL。我知道如何添加自定义应用程序的 URL,但无法弄清楚如何添加管理应用程序的 URL。请指导我完成这个。
基本上完整的 URL 应该类似于admin/my_url
.
更新
我想要一种方法,之后我也可以使用管理员反向映射 URL。
我正在使用 django 1.4 和 Python 2.7。
我只有一个简单的要求,我必须向 django 管理应用程序添加一个新 URL。我知道如何添加自定义应用程序的 URL,但无法弄清楚如何添加管理应用程序的 URL。请指导我完成这个。
基本上完整的 URL 应该类似于admin/my_url
.
更新
我想要一种方法,之后我也可以使用管理员反向映射 URL。
+1 为 Jingo 对您最初问题的回答。考虑到您对答案的澄清评论:这样的 URL不是“独立于应用程序”,它是应用程序“管理员”的 URL。
通过覆盖 get_urls() 将 URL 添加到管理站点类似于 ModelAdmin: 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() 然后对默认管理站点进行monkeypatch,以便它使用您的 get_urls() 但我不知道这是否真的有效 - 您可能必须在它之后立即进行monkeypatch “第一个”进口...
只需将所需的 url 映射放在根 urls.py 中的管理映射之前。将获取请求的第一个匹配项,因为 django 从上到下进行 url 映射。请记住,您不要使用管理员通常需要或提供的 url,因为这永远不会与它前面的自定义映射匹配。!