7

我正在使用 django 1.4 和 Python 2.7。

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

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

更新

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

4

2 回答 2

6

+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 “第一个”进口...

于 2012-07-02T06:34:08.480 回答
3

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

于 2012-07-02T06:02:00.927 回答