0

我正在使用Django。 我试图设置基于django用户访问级别使用的模板。 正如你所看到的,我正在使用LoginRequiredMixin和generic.TemplateView。如何使用基于is_authenticated和is_superuser的generic.TemplateView设置template_name?

这是我想做什么:

此代码是在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

你需要这样的请求,就像你在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) 
相关问题