在Django中如何展示除当前登录用户之外的所有系统用户
问题排查及修正方案
- 未定义变量直接调用:代码中
h = User.objects.get(id=pk)的pk变量没有提前定义,运行时会直接抛出NameError异常,且该行逻辑和你要实现的「排除已登录用户」需求无关,可直接删除。 - 过滤逻辑错误:注释中写的
User.objects.filter(id=request.user).exclude(id=request.user)逻辑自相矛盾,先过滤出ID等于当前登录用户的记录再排除同ID的记录,最终返回结果永远是空查询集;同时id字段需要匹配用户ID值,正确写法是取request.user.id而非直接传request.user对象。 - 未做登录状态校验:如果访问接口的用户是未登录的匿名用户,直接调用
request.user.id会抛出属性异常,需要先判断登录状态。
修正后的可运行代码
def get_home_page_url(request): # 先获取所有用户 all_users = User.objects.all() # 判断用户是否已登录,已登录则排除当前用户 if request.user.is_authenticated: filtered_users = all_users.exclude(id=request.user.id) else: # 未登录时直接返回所有用户,可根据业务需求调整 filtered_users = all_users args = { 'user': all_users, 'filtered_user': filtered_users } return render(request, 'home.html', args)
模板调用说明
在home.html中遍历filtered_user即可拿到排除了当前登录用户的所有用户列表:
{% for item in filtered_user %} <p>{{ item.username }}</p> {% endfor %}
内容的提问来源于stack exchange,提问作者Sakib ovi
相关产品推荐
相关产品推荐

