Wenn Sie in Django den Namen des aktuell angemeldeten Benutzers auf dem Bildschirm anzeigen möchten, können Sie dies tun, indem Sie "{{user.username}}" oder "{{user.get_username}}" in der Vorlage ausführen. Aber warum kann ich diese "Benutzervariable" verwenden, wenn ich sie nicht mit der Funktion "Rendern" in views.py an Vorlagen übergeben oder "get_context_data ()" überschrieben habe, um die Variable hinzuzufügen? Ich hatte hier eine Frage, also habe ich einige Nachforschungen angestellt.
Die Variablen, die in der Vorlage verwendet werden können, werden im Kontext gespeichert (= {
user
ist eine Variable, die der Erläuterung von 2 entspricht. Es gibt andere Hauptvariablen, die verwendet werden können, ohne sie in views.py anzugeben, z. B. request
, perm
und message
.
Schauen Sie sich zunächst settings.py an.
config/setting.py
#
#Kürzung
#
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.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
#
#Kürzung
#
Die folgenden vier Dateien werden von TEMPLATES.OPTIONS.context_processors in settings.py angegeben.
django.template.context_processors.debug
django.template.context_processors.request
Der Speicherort von django.contrib.auth.context_processors.auth
user ・ ・ ・ user user user
django.contrib.messages.context_processors.messages
python:django.contrib.auth.context_processors
#
#Kürzung
#
def auth(request):
"""
Return context variables required by apps that use Django's authentication
system.
If there is no 'user' attribute in the request, use AnonymousUser (from
django.contrib.auth).
"""
if hasattr(request, 'user'):
user = request.user
else:
from django.contrib.auth.models import AnonymousUser
user = AnonymousUser()
return {
'user': user,
'perms': PermWrapper(user),
}
'User':
user kann in der Vorlage durch
return` verwendet werden. Verwenden Sie nach dem Abrufen des Attributs "Benutzername" in "Benutzer" als "Benutzer.Nutzername" oder dem Instanziieren der AnonymousUser-Klasse die Methode "get_user" in der Klasse, um "Benutzer.get_Benutzername" festzulegen und den angemeldeten Benutzernamen zu ändern Es kann angezeigt werden.
Unten befindet sich die Funktion get_username.
python:django.contrib.auth.models
class AnonymousUser:
id = None
pk = None
username = ''
is_staff = False
is_active = False
is_superuser = False
_groups = EmptyManager(Group)
_user_permissions = EmptyManager(Permission)
def __str__(self):
return 'AnonymousUser'
def __eq__(self, other):
return isinstance(other, self.__class__)
def __hash__(self):
return 1 # instances always return the same hash value
def __int__(self):
raise TypeError('Cannot cast AnonymousUser to int. Are you trying to use it in place of User?')
def save(self):
raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")
def delete(self):
raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")
def set_password(self, raw_password):
raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")
def check_password(self, raw_password):
raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")
@property
def groups(self):
return self._groups
@property
def user_permissions(self):
return self._user_permissions
def get_user_permissions(self, obj=None):
return _user_get_permissions(self, obj, 'user')
def get_group_permissions(self, obj=None):
return set()
def get_all_permissions(self, obj=None):
return _user_get_permissions(self, obj, 'all')
def has_perm(self, perm, obj=None):
return _user_has_perm(self, perm, obj=obj)
def has_perms(self, perm_list, obj=None):
return all(self.has_perm(perm, obj) for perm in perm_list)
def has_module_perms(self, module):
return _user_has_module_perms(self, module)
@property
def is_anonymous(self):
return True
@property
def is_authenticated(self):
return False
def get_username(self):
return self.username