我正在使用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)
任何输入都表示赞赏。谢谢。
答案 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)