Django1.8(python3.4):使用基于类的视图显示基于用户授权的不同模板

2024-05-08 19:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想有一个基于类的视图'主页'。当用户访问“主页”时:

如果用户是来宾,则调用来宾函数 如果用户已登录,则调用已登录函数

然后调用的函数设置适当的模板和上下文。在

这样做是正确的吗?如果是的话怎么办?我所找到的文档只对函数视图进行了详细说明。在

谢谢!在


Tags: 函数用户文档视图模板主页来宾
2条回答

你知道,你的问题真的是没有限制的。做这件事有很多不同的方法。在

我可能会将TemplateView子类化,重写dispatch方法以根据场景设置不同的模板。在

为了弄清楚您的逻辑如何适应各种cbv,我推荐使用Classy Class-Based-Views资源,这样您就可以看到哪些方法在何处被调用。在

我将重写^{}以设置模板名称,并重写{a2}以设置上下文数据。您可以使用self.request.user访问用户,并检查他们是否使用^{}方法登录。在

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的不同方法来定制功能,而不是为guest调用一个方法,或者为完成所有操作的登录用户调用另一个方法。如果您真的想调用一个方法来完成所有事情,那么最好使用函数视图。在

相关问题 更多 >