Beschränken Sie den Zugriff auf einen Teil einer Vorlage auf Benutzer, die Teil einer Gruppe sind, mithilfe von klassenbasierten Ansichten. Django 2.0

ccsv

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'
Franey

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.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel