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
子类化,重写dispatch
方法以根据场景设置不同的模板。在为了弄清楚您的逻辑如何适应各种cbv,我推荐使用Classy Class-Based-Views资源,这样您就可以看到哪些方法在何处被调用。在
我将重写^{} 以设置模板名称,并重写{a2}以设置上下文数据。您可以使用} 方法登录。在
self.request.user
访问用户,并检查他们是否使用^{请注意,我重写了
TemplateView
的不同方法来定制功能,而不是为guest调用一个方法,或者为完成所有操作的登录用户调用另一个方法。如果您真的想调用一个方法来完成所有事情,那么最好使用函数视图。在相关问题 更多 >
编程相关推荐