0

J'utilise Django. Je tente de définir le modèle à utiliser en fonction du niveau d'accès de l'utilisateur django. Comme vous pouvez le voir, j'utilise LoginRequiredMixin et generic.TemplateView.Comment définir le template_name en utilisant generic.TemplateView basé sur is_authenticated vs is_superuser?

C'est ce que je voudrais faire:

Ce code est utilisé dans views.py.

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

Malheureusement, il semble que je ne peux pas accéder à l'utilisateur. de cette façon.

Dans views.py J'ai aussi les vues api qui fonctionnent comme prévu en fonction de l'authentification de l'utilisateur. C'est une suit:

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) 

Toute contribution est appréciée. Je vous remercie.

Répondre

1

Vous avez besoin de la demande alors faites comme dans MyList (utilisez une fonction).

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' 

Soit dit en passant:

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

est la même que (meilleure version):

if self.request.user.is_superuser: 

Et si vous utilisez LoginRequiredMixin, vous savez déjà que l'utilisateur est authentifié afin que votre deuxième déclaration if est inutile.

Voici MyList mise à jour:

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)