Ich möchte Benutzer in bestimmten Gruppen daran hindern, auf Teile der HTML-Vorlage zuzugreifen. Ich habe eine klassenbasierte Ansicht, die so aussieht:
Views.py
class PostListView(ListView):
model = BlogPost
paginate_by = 10
template_name = 'main/mysite.html'
Mit funktionsbasierten Ansichten kann ich den Zugriff auf eine Vorlage basierend auf einer bestimmten Gruppe mithilfe request.user.groups.filter(name='GROUP_NAME').exists()
von In Django einschränken. Wie überprüfe ich, ob sich ein Benutzer in einer bestimmten Gruppe befindet?
Ich habe versucht, meine view.py- und HTML-Vorlage folgendermaßen zu ändern:
views.py
class PostListView(ListView):
model = BlogPost
paginate_by = 10
template_name = 'main/mysite.html'
def dispatch(self, request):
in_group = request.user.groups.filter(name='GROUP_NAME').exists()
return in_group
HTML TEMPLATE
....
{% if in_group %}
some code here shows up if user belong to group
{% endif %}
....
Dies gibt mir die richtige Anzeige, wenn der Benutzer kein Mitglied der Gruppe ist, aber wenn er Mitglied der richtigen Gruppe ist, erhalte ich einen Zuordnungsfehler:
Exception Type: AttributeError at /mysite
Exception Value: 'bool' object has no attribute 'get'
Wenn Sie eine klassenbasierte Ansicht verwenden, können Sie eine Kontextvariable in Ihre Vorlage aufnehmen, indem Sie die folgende get_context_data()
Methode überschreiben :
class PostListView(ListView):
model = BlogPost
paginate_by = 10
template_name = 'main/mysite.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['in_group'] = self.request.user.groups.filter(name='GROUP_NAME').exists()
return context
Sehen Sie sich die Django - Dokumentation für weitere Informationen get_context_data()
.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen