如何使用基于is_authenticated vs is_superuser的generic.TemplateView设置template_name?

时间:2015-07-21 00:12:15

标签: python django django-templates django-authentication login-required

我正在使用Django。 我正在尝试根据django用户访问级别设置要使用的模板。 如您所见,我正在使用LoginRequiredMixin和generic.TemplateView。

这就是我想做的事情:

此代码用于views.py。

class TableView(LoginRequiredMixin, generic.TemplateView):
    if user.is_superuser == True:
        template_name = 'achtable.html'
    elif user.is_authenticated:
        template_name = 'userachtable.html'

不幸的是,我似乎无法访问该用户。以这种方式。

在views.py中,我还有基于用户身份验证按预期工作的api视图。这是一个:

class MyList(LoginRequiredMixin, generics.ListCreateAPIView):
    serializer_class = MySerializer
    def get_queryset(self):
        if self.request.user.is_superuser==True:
            queryset = ImportantStuff.objects.all()
            return queryset
        elif self.request.user.is_authenticated():
            queryset = ImportantStuff.objects.all()
            return queryset.filter(claimed=False)

任何输入都表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

您需要这样做,就像您在MyList中所做的那样(使用一个函数)。

class TableView(LoginRequiredMixin, generic.TemplateView):
    def get_template_names(self):
        if self.request.user.is_superuser:
             return 'superadmin/path/template.html'
        return 'regular/path/template.html'

顺便说一下:

if self.request.user.is_superuser==True:

与(更好的版本)相同:

if self.request.user.is_superuser:

如果您使用LoginRequiredMixin,则您已经知道用户已通过身份验证,因此您的第二个if语句无用。

此处MyList已更新:

class MyList(LoginRequiredMixin, generics.ListCreateAPIView):
    serializer_class = MySerializer
    def get_queryset(self):
        if self.request.user.is_superuser:
            return ImportantStuff.objects.all()
        return ImportantStuff.objects.filter(claimed=False)