2017-01-02 106 views
3

我試圖將自定義頁面添加到沒有模型關聯的管理員。將自定義頁面添加到沒有模型的django管理器

這是我迄今爲止取得的成就。

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管理界面一些應用程序(賬號,身份驗證,socialaccounts,網站)。

回答

1

這是因爲您的其他管理員正在使用默認的admin.site。您需要用您自己的as explained here完全替換默認admin.site(您可能還想要read this too)。

或者你可以僅僅通過的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 

法律聲明:我將不承擔任何形式的這種「解決方案任何不必要的副作用「,其中包括(但不限於)您的同事在下一次代碼審查時對您進行了解鎖。這是個骯髒的解決方案。一團糟。它很臭。這是邪惡的。你不應該那樣做,真的。

+0

感謝您的回覆。我知道文檔,我認爲通過在INSTALLED_APPS中包含django.contrib.admin,autodiscover仍然是活動的。我不太喜歡重寫方法get_urls()的解決方案,我更願意手動包含所有第三方應用程序。有關如何做到這一點的任何建議? – Pietro

相關問題