我正在尝试在没有模型关联的情况下向管理员添加自定义页面。
这就是我迄今为止所取得的成就。
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
。您需要完全替换默认值admin.site
与你自己的正如这里所解释的 https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-the-adminsite-class(您可能还想也读这个 https://stackoverflow.com/questions/4877335/how-to-use-custom-adminsite-class).
或者你可以通过猴子修补默认的方式来完成它admin.site.get_urls()
method:
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
法律免责声明:我不会对此“解决方案”的任何不良副作用负责,包括(但不限于)您的同事在下一次代码审查中对您进行攻击。这是一个肮脏的解决方案。一团糟。很臭。这是邪恶的。你不应该这样做,真的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)