<p>我将重写<a href="https://docs.djangoproject.com/en/1.8/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin.get_template_names" rel="nofollow">^{<cd1>}</a>以设置模板名称,并重写{a2}以设置上下文数据。您可以使用<code>self.request.user</code>访问用户,并检查他们是否使用<a href="https://docs.djangoproject.com/en/1.8/topics/auth/default/#authentication-in-web-requests" rel="nofollow">^{<cd4>}</a>方法登录。在</p>
<pre><code>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'
</code></pre>
<p>请注意,我重写了<code>TemplateView</code>的不同方法来定制功能,而不是为guest调用一个方法,或者为完成所有操作的登录用户调用另一个方法。如果您真的想调用一个方法来完成所有事情,那么最好使用函数视图。在</p>