2013-12-16 107 views
0

我想在一個URL下使用兩個不同的CBV - 取決於用戶的權限。意見很不一樣,我不想將這兩種觀點融合爲一種。多個基於一個URL的視圖

這會是一個很好的方法嗎?我想到的是這樣的:

class View1(TemplateView): 
    ... 

class View2(TemplateView): 
    ... 

def unified_view(request): 
    if request.user.has_perm('...'): # here I could decide which CBV to use 
     return View1 
    return View2 

unified_view會在應用程序的urls.py使用,並決定使用哪個CBV。顯然return View1不起作用。什麼是正確的電話?

回答

1

我敢肯定你需要返回

View1.as_view() 
+1

差不多。我繼續玩耍。使用'View1.as_view()(request)'適用於我。如果基於功能的視圖有參數,我想我需要使用'View1.as_view()(request,* args,** kwargs)'。 – mawimawi

1

我不會建議您這樣做,基於類的觀點應該是簡單,做一兩件事。

如果你做到這一點,您可以覆蓋TemplateView的get_context_dataget_template_names爲不同的用戶。

+1

「簡單,做一件事」就是我有兩種不同CBV的確切原因:一種是針對具有某種權限的用戶,另一種針對其他用戶。 – mawimawi

相關問題