我想要一个基于类的视图“主页”。当用户访问“主页”:Django 1.8(Python 3.4):基于基于类的视图显示基于用户授权的不同模板
如果用户是客人,客人函数被调用 如果用户登录,一个登录函数被调用
称为该函数然后设置相应的模板和上下文。
这是这样做的正确方法吗?如果是的话如何?我发现的文档只用函数视图来详细说明。
谢谢!
我想要一个基于类的视图“主页”。当用户访问“主页”:Django 1.8(Python 3.4):基于基于类的视图显示基于用户授权的不同模板
如果用户是客人,客人函数被调用 如果用户登录,一个登录函数被调用
称为该函数然后设置相应的模板和上下文。
这是这样做的正确方法吗?如果是的话如何?我发现的文档只用函数视图来详细说明。
谢谢!
我会覆盖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
不同的方法来定制的功能,而不是要求客人一个方法或做家居登录的用户的另一种方法。如果你真的想调用一个完成所有事情的方法,那么最好使用一个函数视图。
你知道吗,你的问题真的是开放式的。有很多不同的方式来做到这一点。
我可能会子类TemplateView
,覆盖dispatch
方法来设置一个不同的模板基于场景。
为了弄清楚您的逻辑如何适合各种CBV,我推荐使用Classy Class-Based-Views资源,以便您可以查看哪些方法在哪里调用。