Доступ к объектам пользователя через User.objects.filter для страницы профиля
Как я могу запросить модель User для получения информации о пользователе, такой как: имя пользователя, электронная почта, имя и фамилия в его профиле. Я хочу отобразить всю эту информацию на странице его профиля.
как вы можете видеть здесь в представлении Profle я хочу получить доступ к электронной почте пользователя, но как я могу запросить базу данных, чтобы получить всю эту информацию на странице профиля?
def profile(request, pk):
user_profile = User.objects.filter(email=request.user)
context = {'user_profile':user_profile}
return render(request, 'profile.html', context)
шаблон профиля:
<p>{{user.email}}</p>
На самом деле вы уже получили доступ к нужной вам информации, но вы не сопоставили имя контекстной переменной в вашем представлении и в вашем шаблоне. Чтобы прояснить ситуацию, я обычно прикрепляю '_context' к контекстной переменной, которую я передаю в шаблон.
Так что в этом случае
страница профиля ?
def profile(request, pk):
user_profile = User.objects.filter(email=request.user)
context = {'user_context':user_profile}
return render(request, 'profile.html', context)
шаблон профиля:
<p>{{user_context.email}}</p>
Вы не обязаны следовать этому соглашению, но важно, что две вещи, которые я назвал 'user_context', имеют одинаковые имена.
If you want to access only current logged in user information so you should not use filter() as it gives you queryset and used via loops which we run in templates. You should use get_object_or_404[django-doc] for displaying data of single object. It gives 404 if found nothing.
Views.py
from django.shortcuts import get_object_or_404
def profile(request, pk):
single_user = get_object_or_404(User,id=request.user.id)
context = {'single_user':single_user}
return render(request, 'profile.html', context)
Файл шаблона
{% if single_user %}
<p>Email : {{single_user.email}}</p>
<p>Username: {{single_user.username}}</p>
<p>first name : {{single_user.first_name}}</p>
<p>last name: {{single_user.last_name}}</p>
{% else %}
<p>user is not coming</p>
{% endif %}
Я решил свою проблему, сделав следующее в представлении профиля:
def profile(request, pk):
user_context = get_object_or_404(User,id=pk)
context = {'user_context':user_context}
return render(request, 'profile.html', context)
Теперь я могу получить доступ ко всей информации о пользователе в шаблоне по:
<div class="container">
<div class="row justify-content-center">
<p>Email: {{user.email}}</p>
<br>
<p>Username {{ user.username }}</p>
</div>
</div>