【问题标题】:how do i show user posts in one page and at the same time users can see others posts in their page? like the way facebook works?我如何在一个页面中显示用户帖子,同时用户可以在他们的页面中看到其他帖子?喜欢 Facebook 的工作方式吗?
【发布时间】:2019-03-28 09:32:31
【问题描述】:

我正在创建一个网站,该网站有一个主页,所有用户都可以在其中看到其他人的帖子,我想让用户在他们的个人资料中看到他们自己的帖子,并在他们访问他们的个人资料时看到其他人的帖子我该怎么做?

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

这是我的看法

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)

这是我的个人资料.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>

【问题讨论】:

  • posts = User.posts.objects.get(pk=pk) 没有意义。你有一个user,如果你想要用户的帖子,那么posts = user.posts.all()

标签: django


【解决方案1】:

您在ProfileView 类中定义了一个方法view_profile。这永远不会被调用。你可以做两件事:

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

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

【讨论】:

  • 好吧,我在 ProfileView 中有方法 view_profile 的原因是我正在通过它传递用户信息(例如,姓名、个人资料照片、电子邮件等)并且它工作正常。我尝试使用 get 方法将用户帖子传递给同一模板,但现在当用户访问另一个用户个人资料时,他的帖子会显示在所有其他用户个人资料中。有没有一种方法可以通过一种方法在 view_profile 中传递用户帖子和他的信息?并允许用户在他们的个人资料页面中查看其他人的帖子?我真的很感激
  • 你的view_profile 方法不行。它永远不会被调用,它包含会引发异常的代码。唯一被调用的方法是 get 方法。
  • 我已删除它(view_profile),现在所有信息都通过 get 方法传递。如何允许用户查看其他用户个人资料页面上的帖子?并在他自己的个人资料页面中查看他自己的帖子。有一个主页显示所有用户的帖子@dirkgroten
  • 或多或少像您尝试的那样:如果有pk,则表示他正在查看另一个用户的个人资料页面,因此您获取另一个user,然后是posts = user.posts.all()。如果没有pk,那么posts = request.user.posts.all().
  • 我将 pk=pk 更改为 user=user,效果非常好。
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多