我正在尝试在没有模型关联的情况下将自定义页面添加到管理员。
这是我到目前为止所取得的成就。
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...
这实际上是可行的,但是问题是,使用此解决方案,我从Django管理界面(帐户,身份验证,社交帐户,网站)中松了一些应用程序。
最佳答案
这是因为您的其他管理员正在使用默认的admin.site
。您需要用您自己的as explained here完全替换默认的admin.site
(您可能还需要read this too)。
或者,您可以通过猴子修补默认的admin.site.get_urls()
方法来实现小 pig 风格:
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
法律免责声明:对于此“解决方案”的任何不希望的副作用,我将不承担任何责任,包括(但也不限于)您的同事在下次代码审查中为您辩护。这是一个肮脏的解决方案。一团糟。太臭了这是邪恶的。确实,您不应该这样做。
关于python - 在没有模型的情况下将自定义页面添加到django admin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41423711/