我正在创建一个网站,该网站的主页上所有用户都可以看到其他帖子,并且我希望允许用户在自己的个人资料中看到自己的帖子,并在他们访问自己的个人资料时看到其他人的帖子?
我曾尝试过滤帖子,但现在的问题是已登录的用户能够在其个人资料页面中看到他/她的帖子,但是当他/她访问另一个用户时,他会在该用户页面上看到自己的帖子
这是我的观点
class ProfileView(TemplateView):
template_name = 'Profile/Profile.html'
#queryset = Posts.objects.all()
@login_required
def view_profile(self,request, pk=None):
if pk:
user = User.objects.get(pk=pk)
posts = User.posts.objects.get(pk=pk)
else:
user = request.user
#args = {'user': request.user}
#if pk:
posts = User.posts.objects.all().order_by('-date')
return render(request,('Profile/Profile.html'), {'user': user , 'posts':posts })
def get(self, request, pk=None):
#form = HomeForm()
#posts = Post.objects.all().values('user') #order_by('-date')
posts = Post.objects.filter(user=request.user.id).order_by('-date')
users = User.objects.exclude(id=request.user.id)
if pk:
posts = Post.objects.get()#.order_by('-date')
#user = User.posts.get(request, pk)
else:
user = request.user
#friend = Friend.objects.get(current_user=request.user)
#friends = friend.users.all()
args = { 'posts': posts, 'users': users,
}
return render(request, self.template_name, args)
这是我的profile.html
{% for post in posts %}
<div class="row" style="width: 18rem; height:18rem; display:table-row" >
<div class=" card border-grey row mb-3 shadow border-bottom-0" >
<div class="card-header " >
<!-- <a class="mr-auto " href="{% url 'Profile:view_profile_with_pk' pk=user.pk %}"> <b>{{ post.user.username }} </b> </a>-->
</div>
<div class="card-body ">
{% if post.image %}
<p class="card-text border-dark" >
<img src="{{ post.image.url }}" class="mw-100 rounded border-dark" style="width: 20.24rem; ">
</p>{% endif %}
</div>
<div class="card-footer bg ">
</div>
</div>
{% endfor %}
</div>
答案 0 :(得分:0)
您在view_profile
类中定义了方法ProfileView
。这从未被称为。您可以做两件事:
当用户查看别人的个人资料时创建一个不同的视图:您仍然可以使用相同的模板,但是它为您提供了以后在向自己的个人资料(例如编辑帖子)添加功能时的灵活性。不需要其他观点。由于一个用户自己的个人资料页面,您想要显示朋友(其他用户)的列表,并且当您查看其中一个朋友的个人资料页面时,您不想显示该列表,因此这也更有意义。为此,请将view_profile
移到具有自己的URL路径的视图中。
或将您现在在view_profile
中拥有的代码移至get
方法中。只需记住:当您有一个user
对象(user = User.objects.get(pk=pk)
)时,帖子列表就是user.posts.all()
。