2015-05-06 20 views
2

我有一個基於類的視圖,它只顯示配置列表。Django:使用Admin上下文擴展基於類的視圖的上下文

該視圖是通過使用下面的代碼添加到Django管理站點:

@admin.register(ZbxHostConf) 
class ZbxHostConfListViewAdmin(admin.ModelAdmin): 
    review_template = 'admin/admzbxhostconf_list.html' 

    def get_urls(self): 
     urls = super(ZbxHostConfListViewAdmin, self).get_urls() 
     my_urls = patterns('', 
          (r'^zbxhostconflist/$', self.admin_site.admin_view(self.review)), 
          ) 
     return my_urls + urls 


    def review(self, request): 
     return ZbxHostConfListView.as_view()(request) 

模板延伸admin/base_site.html模板。只有在登錄到Django Admin站點後,我才能訪問該站點。不幸的是,該模板無法訪問管理視圖提供的上下文數據。

作爲Django的文檔建議的上下文數據將直接被提供給TemplateResponse功能:存在extra_context中用參數的可能性,但基於類別的觀點並不提供

def my_view(self, request): 
     # ... 
     context = dict(
      # Include common variables for rendering the admin template. 
      self.admin_site.each_context(request), 
      # Anything else you want in the context... 
      key=value, 
     ) 
     return TemplateResponse(request, "sometemplate.html", context) 

對於基於功能的觀點這個說法。我想我必須修改get_context_data函數,但我並不真正瞭解如何將管理上下文數據提供給基於類的視圖的get_context_data函數。有什麼建議麼?

+0

不是直接的。爲了完整起見,我剛添加了它。但如果刪除將改善問題,我會這樣做。 –

回答

1

這可能不是一個正確的答案,但我相信你可以嘗試這樣的事情。

#!/usr/bin/python3 

from django.contrib import admin 

class MyTemplateView(TemplateView): 
    def get_context_data(self, **kwargs):  
     context = super().get_context_data(**kwargs) 
     context.update(admin.site.each_context(self.request)) 
     return context 
+0

@PhilippWiesner它適合你嗎?我沒有在我的電腦上運行它。希望它有幫助 – Yeo

+0

是的,它工作正常,管理上下文數據與視圖中的正常數據一起發送。非常感謝你 :) –