как показать сообщения пользователя на одной странице, и в то же время пользователи могут видеть сообщения других на своей странице? нравится, как работает Facebook? - PullRequest
0 голосов
/ 28 марта 2019

Я создаю веб-сайт, на котором есть домашняя страница, где все пользователи могут видеть посты других пользователей, и я хочу, чтобы пользователи могли видеть свои собственные посты в своем профиле и видеть посты других людей, когда они посещают свой профиль. Как мне это сделать?

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

это мои взгляды

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>

1 Ответ

0 голосов
/ 28 марта 2019

Вы определили метод view_profile в классе ProfileView.Это никогда не называется.Вы можете сделать две вещи:

  • Создать другое представление, когда пользователи просматривают чужой профиль: вы все еще можете использовать тот же шаблон, но позже он дает вам гибкость для добавления функциональности всобственный профиль пользователя (например, редактировать сообщения), который вам не нужен в другом представлении.Также это имеет больше смысла, поскольку на одной странице профиля пользователя вы хотите показать список друзей (других пользователей) и, возможно, не хотите показывать это при просмотре страницы профиля одного из друзей.Чтобы сделать это, переместите view_profile в его собственное представление с собственным URL-путем.

  • Или переместите код, который у вас есть в view_profile, в метод get.Просто помните: когда у вас есть объект user (user = User.objects.get(pk=pk)), список сообщений просто user.posts.all().

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