如何在一个页面中显示用户帖子,同时用户可以在其页面中看到其他帖子?喜欢facebook的工作方式吗?

时间:2019-03-28 09:32:31

标签: django

我正在创建一个网站,该网站的主页上所有用户都可以看到其他帖子,并且我希望允许用户在自己的个人资料中看到自己的帖子,并在他们访问自己的个人资料时看到其他人的帖子?

我曾尝试过滤帖子,但现在的问题是已登录的用户能够在其个人资料页面中看到他/她的帖子,但是当他/她访问另一个用户时,他会在该用户页面上看到自己的帖子

这是我的观点

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>

1 个答案:

答案 0 :(得分:0)

您在view_profile类中定义了方法ProfileView。这从未被称为。您可以做两件事:

  • 当用户查看别人的个人资料时创建一个不同的视图:您仍然可以使用相同的模板,但是它为您提供了以后在向自己的个人资料(例如编辑帖子)添加功能时的灵活性。不需要其他观点。由于一个用户自己的个人资料页面,您想要显示朋友(其他用户)的列表,并且当您查看其中一个朋友的个人资料页面时,您不想显示该列表,因此这也更有意义。为此,请将view_profile移到具有自己的URL路径的视图中。

  • 或将您现在在view_profile中拥有的代码移至get方法中。只需记住:当您有一个user对象(user = User.objects.get(pk=pk))时,帖子列表就是user.posts.all()