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
相关产品推荐
相关产品推荐

