Профиль не имеет пользователя
Я пытаюсь использовать контекстный процессор для показа страницы профиля, и когда я использую его, сайт показывает
У профиля нет пользователя
Контекстный процессор:
from .models import Profile
def get_profile (request):
profile = Profile()
return{'information':profile}
models.py
class Profile(models.Model):
user = models.OneToOneField(User, verbose_name=_("user"), on_delete=models.CASCADE)
slug = models.SlugField(blank=True, null=True)
image = models.ImageField(_("image"), upload_to='profile_img', blank=True, null=True)
country = CountryField()
address = models.CharField(max_length=100)
join_date = models.DateTimeField(_("join date"),default = datetime.datetime.now)
Также я сделал основной url для профиля, так что когда я хочу перейти на страницу профиля, я пишу на url
accounts/profile/mohammad
Аккаунт - это имя приложения, профиль - имя страницы, mohammad - имя пользователя
Подсказки: Я хочу использовать profile.html в выпадающем меню
Вы можете получить доступ к Profile
для данного пользователя с помощью:
def get_profile (request):
profile = None
if request.user.is_authenticated:
profile = Profile.objects.filter(user=request.user).first()
return {'information': profile }
или как говорит @xyres:
def get_profile (request):
profile = None
if request.user.is_authenticated:
profile = getattr(user, 'profile', None)
return {'information': profile }
Для пользователя, который не аутентифицирован или не имеет Profile
, information
будет None
, иначе это Profile
объект с .user
вошедшим пользователем.
Если вы хотите получить доступ к пользователю, указанному, например, slug, вы используете представление, поэтому вы можете определить путь:
path('accounts/profile/<slug:username>/', some_view)
и затем мы можем использовать:
from django.shortcuts import get_object_or_404
def some_view(request, username):
profile = get_objec_or_404(Profile, slug=username)
# …
return render(request, 'some-template.html', {'information': profile})