Как определить детальное представление пользователя в приложении для многопользовательского блога? - PullRequest
1 голос
/ 26 апреля 2020

Я создаю приложение для блога с несколькими пользователями, и мне бы хотелось иметь такую ​​возможность, чтобы каждый зарегистрированный пользователь мог нажимать на каждое имя пользователя (автора сообщения) и видеть подробности этого профиля. Моя текущая функция дает мне только данные для текущего вошел в систему пользователь не Mattew, какой пользователь я нажимаю. у меня есть аналогичная функция CBV, работающая для просмотра списка сообщений, который показывает мне все сообщения для каждого пользователя, и я пытался сделать то же самое, но это не сработало .. Пожалуйста, помогите;)

просмотр

> @login_required
def profile_detail(request):
    context = {
        'profile': Profile.objects.all()
    }
    return render(request, 'users/user_detail.html', context)

модель

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')

def __str__(self):
    return f'{self.user.username} Profile'
def save(self, *args,**kwargs):
    super().save(*args,**kwargs)

    img = Image.open(self.image.path)

    if img.height >300 or img.width > 300:
        output_size = (300, 300)
        img.thumbnail(output_size)
        img.save(self.image.path)

шаблон URL

path('profile-detail/', user_views.profile_detail, name='user_detail'),

ссылка

<a class="mr-2" href="{% url 'user_detail' %}">{{ post.author }}</a>

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

Отображение профиля авторизованного пользователя

Вы получаете объект Profile для авторизованного пользователя с:

from django.shortcuts import get_object_or_404

@login_required
def profile_detail(request):
    context = {
        'profile': <b>get_object_or_404(Profile, user=request.user)</b>
    }
    return render(request, 'users/user_detail.html', context)

Отображение профиля автора

Если вы хотите показать профиль author, то вам следует передать его по URL. Таким образом, вы можете создать в своем шаблоне path, который будет выглядеть следующим образом:

urlpatterns = [
    # &hellip;,
    path('profile/<b><int:pk></b>', views.profile_detail, name='user_detail')
    # &hellip;,
]

, вы можете отобразить URL с помощью:

<a class="mr-2" href="{% url 'user_detail' pk=post.author.pk %}">{{ post.author }}</a>

, а затем в представлении вы можете использовать первичный ключ этого пользователя:

from django.shortcuts import get_object_or_404

@login_required
def profile_detail(request<b>, pk</b>):
    context = {
        'profile': <b>get_object_or_404(Profile<b>, pk=pk</b>)</b>
    }
    return render(request, 'users/user_detail.html', context)
0 голосов
/ 28 апреля 2020

Я попробовал и попробовал, и я нашел решение, я должен был определить эту функцию следующим образом, теперь она отлично работает functon

@login_required
def profileDetail(request, pk):
context = {
    'user': get_object_or_404(User, pk=pk)
}
return render(request, 'users/user_detail.html', context)
0 голосов
/ 27 апреля 2020

все шаблоны URL

urlpatterns = [
path('admin/', admin.site.urls),
path('register/', user_views.register, name='register'),
path('profile/', user_views.profile, name='profile'),
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
path('password-reset/', auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'), name='password_reset'),
path('password-reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset_done.html'), name='password_reset_done'),
path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'), name='password_reset_confirm'),
path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset_complete.html'), name='password_reset_complete'),
path('profile-detail/<int:pk>/', user_views.profile_detail, name='user_detail'),
path('', include('blog.urls')),

]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...