You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板for循环内发送好友请求按钮不显示问题求助

Django模板for循环内发送好友请求按钮不显示问题

在Django项目中,当在send_friend.html模板里添加{% for user in allusers %}循环标签后,发送好友请求的按钮就消失了;移除该循环标签时,按钮能正常显示。相关代码如下:

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>

问题排查与解决方法

1. 确认视图已传递allusers上下文

如果渲染send_friend.html的视图函数没有把allusers变量传给模板,循环根本不会执行,自然看不到按钮。需要在对应视图中添加:

def your_view_name(request):
    # 获取所有用户,可根据需求过滤
    allusers = User.objects.all()
    return render(request, 'send_friend.html', {'allusers': allusers})

2. 调试循环内的条件判断

按钮不显示大概率是因为循环内的条件没有满足,可在模板中临时添加调试信息,直观查看每个用户的状态:

{% for user in allusers %}
<h1>
  用户:{{ user.username }} | 是否超级用户:{{ user.is_superuser }} | 是否是自己:{{ user == request.user }} | 是否是好友:{{ user in request.user.friends.all }}
  {% if not user.is_superuser %}
    {% 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">发送好友请求</a>
    {% elif user in request.user.friends.all %}
    <p>你们已经是好友啦!</p>
    {% else %}
    <p>这是你自己哦</p>
    {% endif %}
  {% endif %}
</h1>
{% endfor %}

通过这些信息可以快速定位是哪一层条件过滤掉了按钮。

3. 检查friends字段定义

如果request.user.friends.all()是自定义的好友关系,确保User模型中正确定义了多对多字段:

class User(AbstractUser):
    friends = models.ManyToManyField('self', symmetrical=True, blank=True)

4. 修正模板拼写错误(可选)

模板中按钮文本Send Friend Requst存在拼写错误,建议改为Send Friend Request,避免前端显示异常。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:06:29