Управление данными пользователя на Django HTML с помощью передачи данных
Я делаю небольшой пример проекта на Django. Я делаю блог.
В файле views.py я могу отрисовать index.html с постами, передав словарь posts в третий аргумент функции render, как показано ниже.
def home(request):
posts = post.objects.all()
return render(request, 'index.html', {'posts':posts})
Сделав это, я могу использовать данные постов в HTML, как показано ниже
{% for post in posts %}
<a href="{% url 'detail' post.id %}">
<h3>{{ post.title }}</h3>
<h4>{{ post.id }}</h4>
</a>
<p>{{ post.date }}</p>
Однако, когда мой преподаватель учил меня, как реализовать функцию входа/выхода, я обнаружил, что он не передавал данные пользователя, но он мог управлять данными "пользователя" в HTML, как показано ниже
{% if user.is_authenticated %}
{{ user.username }}님
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Login</a>
{% endif %}
def login(request):
if request.method=='POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(request, username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect('home')
else:
return render(request, 'login.html')
else:
return render(request, 'login.html')
Как if user_is_authenticated
можно успешно отобразить HTML без передачи данных 'user' в views.py?
Объект контекста User
предоставляется шаблону процессором контекста django.contrib.auth.context_processors.auth
, определенным в вашем файле настроек.
https://docs.djangoproject.com/en/2.2/_modules/django/contrib/auth/context_processors/