python - How do I set the template_name using generic.TemplateView based on is_authenticated vs is_superuser? -


i'm using django. i'm attempting set template use based on django user access level. can see i'm using loginrequiredmixin , generic.templateview.

this i'd do:

this code used in views.py.

class tableview(loginrequiredmixin, generic.templateview):     if user.is_superuser == true:         template_name = 'achtable.html'     elif user.is_authenticated:         template_name = 'userachtable.html' 

unfortunatly appears can't access user. in manner.

in views.py have api views work expected based on user authentication. follows:

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) 

any input appreciated. thank you.

you need request you've done in mylist (use function).

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' 

by way:

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

is same (better version):

if self.request.user.is_superuser: 

and if use loginrequiredmixin, know user authenticated second if statement useless.

here mylist updated:

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) 

Comments