Как мои HTML-шаблоны могут получить имя пользователя без каких-либо аргументов, передаваемых views.py? - PullRequest
2 голосов
/ 20 июня 2019

У меня есть приложения для аутентификации Google на основе движка djongo

My views.py отображает домашнюю страницу без каких-либо аргументов:

return render(request=request,template_name="mainapp/homepage.html")

И homepage.html выглядит так:

<html>
   <head></head>
   <body bgcolor = "green">
       <p>THIS IS THE HOMEPAGE</p>
        {% if user.is_authenticated %}
             <p class="display-4">Hello, {{ user.username }} you are signed in</p>
             <a href="/account/logout">Log out</a>
        {% else %}
            <a href={% url "social:begin" "google-oauth2" %}>Login with Google</a>
            <p>Not signed in</p>
	{% endif %}
    </body>
</html>

Тем не менее, после входа пользователя в систему отображается правильное имя пользователя (а не администратора).

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Это из-за django.contrib.auth.context_processors.auth контекстный процессор из ваших настроек:

'OPTIONS': {
    'context_processors': [
        'django.template.context_processors.debug',
        'django.template.context_processors.request',
        <b>'django.contrib.auth.context_processors.auth', </b>
        'django.contrib.messages.context_processors.messages',
        'django.template.context_processors.media',
    ],

Присоединяет текущего зарегистрированного пользователя в шаблоне. Согласно документации:

если этот процессор включен, каждый RequestContext будет содержать эти переменные:

  • пользователь - экземпляр auth.User, представляющий текущего пользователя, вошедшего в систему (или экземпляр AnonymousUser, если клиент не вошел в систему).
  • perms - экземпляр django.contrib.auth.context_processors.PermWrapper, представляющий разрешения, которыми обладает текущий вошедший в систему пользователь.

Вы также можете оформить заказ source.

0 голосов
/ 20 июня 2019
  • Если вы хотите отобразить дополнительные элементы в своем представлении, передайте эти значения в context.
return render(request=request,template_name="mainapp/homepage.html", context = {user: request.user})

Но если пользователь не вошел в систему, вы получите пустую строку при доступе к user.username. Потому что имя пользователя AnonymousUser всегда возвращает пустую строку.

Из этого вопроса вы можете узнать больше вещей, например передать дополнительные значения шаблону -> Как отобразить переменную в шаблоне django?

  • Но если вы хотите сделать это, не передавая ничего в context, просто добавьте приведенное ниже решение в ваш шаблон.

{{ request.user.username }}

Вы можете получить доступ ко всему в request object, как это. Для получения дополнительной информации проверьте этот вопрос -> На что ссылается request.user в Django?

...