【发布时间】:2021-05-27 01:43:29
【问题描述】:
我想在其个人资料页面中显示特定用户的所有帖子,但只显示他们的个人资料信息而不显示帖子。
我的初始代码只是尝试像这样循环遍历模板中的帖子:
{% for post in user.posts.all %}
{% endfor %}
但它没有用。所以我接下来尝试了这个。
views.py
user = get_object_or_404(User, username=username)
post = Post.objects.filter(created_by=user.id)
context = {
'user': user,
'post': post
}
return render(request, 'users/profile.html', context)
profile.html
<div class="user-profile">
<img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
{{ user.username }}
{{ user.email }}
</div>
<div class="user-post-model">
{% for post in posts %}
<img class="rounded-circle post-img" src="{{ post.created_by.profile.image.url }}">
{{ post.title }}
{{ post.content|safe }}
{{post.tag}}
{{ post.created_by }}
{{ post.created_at|naturaltime}}
{% endfor %}
</div>
也没有用
我还尝试使用 ListView 发布帖子。它有效,但不是显示特定用户的个人资料信息,而是显示登录用户的个人资料信息,而是显示特定用户的帖子。
像这样:
def profile(request, username):
user = get_object_or_404(User, username=username)
context = {
'user': user
}
return render(request, 'users/profile.html', context)
class UserPostListView(ListView):
model = Post
template_name = 'users/profile.html'
context_object_name = 'posts'
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Post.objects.filter(created_by=user).order_by('-created_at')
这是后期模型
class Post(models.Model):
title = models.CharField(max_length=255)
content = RichTextField(blank=True, null=True, max_length=30000)
created_at = models.DateTimeField(default=timezone.now)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
tag = models.CharField(max_length=255, default='uncategorised')
class Meta:
ordering = ('-created_at',)
def __str__(self):
return self.title + ' | ' + str(self.created_by)
def get_absolute_url(self):
return reverse("post-detail", kwargs={"pk": self.pk})
怎么了?
【问题讨论】:
-
{% for post in posts %}在上下文中你已经通过了post但你循环了posts -
你试过只用
request.user吗? -
即使我输入了我之前尝试过的
{% for post in post %},它也不会循环显示帖子。 -
request.user也不返回任何东西@M-Chen-3 -
@AbdulAzizBarkat 我想要特定用户的帖子,而不仅仅是登录用户的帖子。就像查看某人的 Youtube\instagram 个人资料/帐户页面一样。它应该只返回该帐户的帖子。
request.user当我点击某人的帐户时,只给我登录用户的信息。
标签: python django django-views django-queryset django-listview