2015-07-19 70 views

回答

1

我会覆盖get_template_names设置模板名称,并get_context_data设置上下文数据。您可以通过self.request.user访问该用户,并检查他们是否使用is_authenticated()方法登录。

class HomepageView(TemplateView): 
    def get_context_data(self, **kwargs): 
     """ 
     Returns a different context depending 
     on whether the user is logged in or not 
     """ 
     context = super(HomepageView, self).get_context_data(**kwargs) 
     if self.request.user.is_authenticated(): 
      context['user_type'] = 'logged in' 
     else: 
      context['user_type'] = 'guest' 
     return context 

    def get_template_names(self): 
     """ 
     Returns a different template depending 
     on whether the user is logged in or not 
     """ 
     if self.request.user.is_authenticated(): 
      return 'logged_in_homepage.html' 
     else: 
      return 'guest_homepage.html' 

请注意,我已经覆盖的TemplateView不同的方法来定制的功能,而不是要求客人一个方法或做家居登录的用户的另一种方法。如果你真的想调用一个完成所有事情的方法,那么最好使用一个函数视图。

1

你知道吗,你的问题真的是开放式的。有很多不同的方式来做到这一点。

我可能会子类TemplateView,覆盖dispatch方法来设置一个不同的模板基于场景。

为了弄清楚您的逻辑如何适合各种CBV,我推荐使用Classy Class-Based-Views资源,以便您可以查看哪些方法在哪里调用。