Профиль не имеет пользователя

Я пытаюсь использовать контекстный процессор для показа страницы профиля, и когда я использую его, сайт показывает

У профиля нет пользователя

Контекстный процессор:

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})
Вернуться на верх