Django: отображение профиля каждого пользователя

Я новичок в Django и пытаюсь отобразить профиль каждого пользователя. Пока что я сделал систему входа в систему и регистрации. Пользователь также может обновлять свои профили, но я действительно не могу показать профиль каждого пользователя, как только вошедший в систему пользователь нажимает на имя пользователя другого пользователя. Мне было интересно, могу ли я что-нибудь сделать с первичным ключом / идентификатором каждого профиля и использовать его для доступа к каждому профилю. Небольшая помощь была бы очень признательна!

Вот как выглядит мой код:

URL-адрес страницы профиля:

path('profile/', views.userprofile, name='userprofile'),

Моя точка зрения на просмотр профиля:

@login_required
def userprofile(request):
    Post = post.objects.order_by('-created')
    return render(request,'social_media/profile.html', {'Post':Post,'Profile':Profile})

Модель для профиля пользователя:

class profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    desc = models.CharField(max_length=1000)
    pfp = models.FileField(default='images/profile.jpg', upload_to='profile_pics/', blank=True)
    cover = models.FileField(default='images/profile.jpg', upload_to='cover_pics/', blank=True)

Ссылка, которая приведет меня к URL-адресу профиля:

<div class="user-pfp-name">
    <a href="{% url 'userprofile' %}">
        <img src="{% static 'social_media/images/profile.jpg' %}" style="height: 35px; width: auto; border-radius: 100%;" alt="">
        {{ i.user.first_name }}
        {{ i.user.last_name }} 
    </a>
</div>

и, наконец, вот страница моего профиля:

      <div class="profile">
            <div class="coverpad">
                  {% if Profile.cover %}
                  <img src="{{ Profile.cover.url }}">
                  {% endif %}
            </div>
            <div class="profilepic">
                  {% if Profile.pfp %}
                  <img src="{{ Profile.pfp.url }}" height="140px">
                  {% endif %}
            </div>
            <div class="profile-middle">
                  <div class="profile-username">{{ user.first_name }} {{ user.last_name }}</div>
                  {% if Profile.desc %}
                  <div class="profile-desc"></div>
                  {% endif %}
            </div>
      </div>

person Fanceh    schedule 25.08.2020    source источник


Ответы (2)


Вы должны передать идентификатор пользователя вашей функции просмотра. Например:

@login_required
def userprofile(request, user_id):
    user = User.object.get(id=user_id)
    return render(request,'social_media/profile.html', {'user': user})

urls.py

path('profile/<int:user_id>', views.userprofile, name='userprofile'),

ссылка на профиль:

<a href="{% url 'userprofile' user_id=user.id %}">

Тогда страница вашего профиля будет выглядеть так:

<div class="coverpad">
                  {% if user.cover %} #or user.profile.cover, i'm not sure
                  <img src="{{ user.cover.url }}"> #or user.profile.cover.url
                  {% endif %}
            </div>

И Т. Д.

person bkrop    schedule 25.08.2020
comment
Это работает, но каждый раз, когда я щелкаю по нему, я попадаю на один и тот же profile_id. Например, каждый профиль, который я нажимаю, приводит меня к 127.0.0.1:8000/profile/3 - person Fanceh; 25.08.2020

Это сработало, я просто изменил свое мнение на это:

@login_required
def userprofile(request, user_id=None):
    if user_id:
        user = User.objects.get(id=user_id)
        Post = post.objects.order_by('-created')
        return render(request,'social_media/profile.html', {'Post':Post,'User':user})
    else:
        user = User.objects.get(id=user_id)
        Post = post.objects.order_by('-created')
        return render(request,'social_media/profile.html', {'Post':Post,'User':user})

Итак, в основном, если пользователь запрашивает идентификатор, я перенаправляю его в профиль идентификатора запрошенного пользователя, и если пользователь (вошедший в систему) хочет увидеть свой собственный профиль, я просто перенаправляю его в его / ее профиль.

person Fanceh    schedule 25.08.2020