0

我正在使用 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)

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

4

1 回答 1

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)
于 2015-07-21T03:10:17.067 回答