0

I'm running into the issue of displaying the button within for-loop tag. When I remove tags {% for user in users %} from send_friend.html, the button is displayed, when I add it again, it's gone.

models.py

class Friend_Request(models.Model):
    from_user = models.ForeignKey(
        User, related_name='from_user', on_delete=models.CASCADE)
    to_user = models.ForeignKey(
        User, related_name='to_user', on_delete=models.CASCADE)

views.py

def send_friend_request(request, pk):
from_user = request.user
to_user = User.objects.get(id=pk)
friend_request, created = Friend_Request.objects.get_or_create(
    from_user=from_user, to_user=to_user)
if created:
    return HttpResponse('friend request sent')
else:
    return HttpResponse('friend request already sent')

send_friend.html

<ul>
  {% for user in allusers %}
  <h1>
    {% if not user.is_superuser %}
    <p></p>
    {% if user not in request.user.friends.all and user != request.user %}
    <a href="/send-friend-request/{{user.id}}" class="btn btn--main btn--pill"
      >Send Friend Requst</a>
    {% elif user in request.user.friends.all %}
    <p>You are friends!</p>

    {% endif %}
    <p></p>
    {% endif %}
  </h1>
  {% endfor %}
</ul>
Chris
  • 1
  • 2
  • 1
    Where is `allusers` defined? Are you passing it into your view context? If not then your forloop won't run and your button(s) won't appear – 0sVoid Aug 22 '22 at 10:59
  • I have added the allusers to the view, but it still doesn't work: @login_required(login_url='login') def send_friend_request(request, pk): from_user = request.user to_user = User.objects.get(id=pk) allusers = User.objects.all() context = { 'allusers': allusers } friend_request, created = Friend_Request.objects.get_or_create( from_user=from_user, to_user=to_user) if created: return render(request, context) else: return HttpResponse('friend request already sent') – Chris Aug 22 '22 at 14:21

2 Answers2

-1

You need to correctly pass a context to the view. In example:

def your_view(request):
    ...
    context = {"allusers": User.objects.all()}
    return render(..., context=context)
NixonSparrow
  • 6,130
  • 1
  • 6
  • 18
  • Hi - I added the context, but it did not change anything. See below the code in the thread. – Chris Aug 22 '22 at 14:24
  • @Chris bro, not to `send_friend_request` view... Share your urls and all views. – NixonSparrow Aug 22 '22 at 20:00
  • your reply did allow me to fix the issue. Indeed, the allusers list was added to the wrong view. `send_friend_request` was sort of a component of `UserProfile` view. Added the list to the right view displayed the button. Thanks man! – Chris Aug 22 '22 at 20:20
-1

Thanks for your responses, I did update the view like below, but it still doesn't work:

@login_required(login_url='login')
def send_friend_request(request, pk):
    from_user = request.user
    to_user = User.objects.get(id=pk)
    allusers = User.objects.all()
    context = {
        'allusers': allusers
    }
    friend_request, created = Friend_Request.objects.get_or_create(
        from_user=from_user, to_user=to_user)
    if created:
        return render(request, context)
    else:
        return HttpResponse('friend request already sent')

Following code also doesn't make the button appear:

@login_required(login_url='login')
def send_friend_request(request, pk):
    from_user = request.user
    to_user = User.objects.get(id=pk)
    allusers = User.objects.all()
    context = {
        'allusers': allusers
    }
    friend_request, created = Friend_Request.objects.get_or_create(
        from_user=from_user, to_user=to_user)
    return render(request, context)
Chris
  • 1
  • 2