Heim > Artikel > Backend-Entwicklung > Lösung des Problems, dass Django-Vorlagen keine Perms-Variablen verwenden können
Dieser Artikel stellt Ihnen hauptsächlich die Methode zur Lösung des Problems vor, dass die Django-Vorlage keine Perms-Variablen verwenden kann. Der Artikel stellt sie ausführlich anhand von Beispielcode vor. Es hat einen gewissen Referenz-Lernwert für alle, die lernen oder arbeiten Wer es braucht, kann folgen. Lasst uns gemeinsam mit dem Herausgeber lernen.
Vorwort
Dieser Artikel stellt Ihnen hauptsächlich die Lösung für das Problem vor, dass die Django-Vorlage keine Perms-Variablen verwenden kann, und stellt sie Ihnen als Referenz zur Verfügung und weiter unten: Es gibt nicht viel zu sagen, werfen wir einen Blick auf die ausführliche Einführung.
Lösung:
Wenn Sie das integrierte Berechtigungsverwaltungssystem von Django verwenden, fügen Sie zunächst
zu den Einstellungen hinzu .py-Datei
INSTALLED_APPS添加: 'django.contrib.auth', MIDDLEWARE添加: 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.context_processors.auth', TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', ], }, }, ]
Wie überprüfe ich Berechtigungen in Vorlagen?
Gemäß den offiziellen Website-Anweisungen https://docs.djangoproject.com/en/1.11/topics/auth/default/#permissions werden die angemeldeten Benutzerberechtigungen im gespeichert Die Variable template {{ perms }}
ist eine Instanz des Berechtigungsvorlagen-Proxys django.contrib.auth.context_processors.PermWrapper
. Weitere Informationen finden Sie im Quellcode django/contrib/auth/context_processors.py
Testfall:
Während des Tests wurde festgestellt, dass die Variable {{ perms }}
überhaupt nicht existierte und es keine Ausgabe gab; nun, wir können nur den Quellcode von erhalten Debuggen Sie Django
def auth(request): """ Returns context variables required by apps that use Django's authentication system. If there is no 'user' attribute in the request, uses AnonymousUser (from django.contrib.auth). """ if hasattr(request, 'user'): user = request.user else: from django.contrib.auth.models import AnonymousUser user = AnonymousUser() print(user, PermWrapper(user), '-----------------------') return { 'user': user, 'perms': PermWrapper(user), }
Beim Testen der Zugriffsschnittstelle habe ich festgestellt, dass einige Schnittstellen Druckberechtigungsinformationen haben, andere jedoch nicht. Es scheint, dass mir das plötzlich klar geworden ist
Die Schnittstelle, die Berechtigungsinformationen drucken kann, gibt Folgendes zurück:
return render(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error})
Die neue Schnittstelle gibt Folgendes zurück:
return render_to_response( 'fms/fms.html', data)
Unterschied zwischen render und render_to_response
render ist eine bequemere Möglichkeit, Vorlagen zu rendern als render_to_reponse. Es wird automatisch RequestContext verwendet, während letzterer manuell hinzugefügt werden muss:
return render_to_response(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error},context_instance=RequestContext(request))
wobei RequestContext eine Unterklasse von django.template.Context
ist. Es akzeptiert request
und context_processors
, damit der Kontext gefüllt und in die Vorlage gerendert wird. Aufgrund der Verwendung der render_to_response
-Methode kann die Vorlage nicht verwendet werden, ohne context_instance=RequestContext(request)
Variable
Das obige ist der detaillierte Inhalt vonLösung des Problems, dass Django-Vorlagen keine Perms-Variablen verwenden können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!