在没有模型的情况下将自定义页面添加到django admin

Pie*_*tro 5 python django admin

我正在尝试在没有模型关联的情况下将自定义页面添加到管理员。

这是我到目前为止所取得的成就。

class MyCustomAdmin(AdminSite):

    def get_urls(self):
        from django.conf.urls import url

        urls = super(MyCustomAdmin, self).get_urls()
        urls += [
            url(r'^my_custom_view/$', self.admin_view(MyCustomView.as_view()))
        ]
        return urls

class MyCustomView(View):
    template_name = 'admin/myapp/views/my_custom_template.html'

    def get(self, request):
        return render(request, self.template_name, {})

    def post(self, request):
      # Do something
      pass

admin_site = MyCustomAdmin()

admin_site.register(MyModel1)
admin_site.register(MyModel2)
# etc...
Run Code Online (Sandbox Code Playgroud)

这实际上是可行的,但是问题是,通过此解决方案,我从Django管理界面(帐户,身份验证,社交帐户,网站)中松了一些应用。

bru*_*ers 5

这是因为您的其他管理员正在使用默认的admin.site. 您需要按照此处的说明将默认设置完全替换为admin.site您自己的设置(您可能也想阅读此内容)。

或者你可以通过monkeypatching默认admin.site.get_urls()方法来做小猪式的:

from django.contrib import admin

_admin_site_get_urls = admin.site.get_urls

def get_urls():        
    from django.conf.urls import url
    urls = _admin_site_get_urls()
    urls += [
            url(r'^my_custom_view/$',
                 admin.site.admin_view(MyCustomView.as_view()))
        ]
    return urls

admin.site.get_urls = get_urls
Run Code Online (Sandbox Code Playgroud)

法律免责声明:对于此“解决方案”的任何不必要的副作用,我概不负责,包括(但不限于)您的同事在下一次代码审查中为您辩护。这是一个肮脏的解决方案。一团糟。它很臭。这是邪恶的。你不应该那样做,真的。