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

如何在未登录状态下获取指定用户的头像与用户名?

解决用户资料页面无法展示所选用户信息的问题

问题分析

当前实现存在两个核心问题:

  • 模板复用混乱:prof.html同时被用作用户列表页和详情页,但模板本身只设计了单个用户的展示结构,没有遍历用户列表的逻辑。
  • 变量名冲突风险:Django模板默认会传入request.user(当前登录用户/匿名用户)上下文,当视图传递的变量名也是user时,虽然后者会覆盖默认值,但容易混淆;未登录时默认user是匿名用户,可能导致显示异常。

具体修复步骤

1. 拆分用户列表与详情模板

创建独立的用户列表模板users_list.html,用于展示所有用户的跳转入口:

{% extends "base.html" %}

{% block content %}
<div class="user-list">
  {% for user in users %}
    <div class="user-item">
      <img src="{{ user.profile.image.url }}" width="50" height="50" alt="{{ user.username }}">
      <a href="{% url 'user_info' user.id %}">{{ user.username }}</a>
    </div>
  {% endfor %}
</div>
{% endblock %}

保留prof.html作为单个用户的详情模板,建议修改变量名避免冲突(可选但推荐):

<!-- 头像部分 -->
<img src="{{ target_user.profile.image.url }}" width="110" height="110">
<!-- 用户名部分 -->
<div class="name"> {{ target_user.username }} </div>

2. 修正视图函数

更新views.py,让列表视图渲染新的列表模板,详情视图传递更清晰的变量名:

User = get_user_model()

def users_list(request):
    users = User.objects.all()
    # 渲染用户列表模板
    return render(request, 'posts/users_list.html', context={'users': users})

def user_info(request, id):
    target_user = get_object_or_404(User, pk=id)
    # 传递target_user变量到详情模板
    return render(request, 'posts/prof.html', context={'target_user': target_user})

3. 完善URL配置

确认用户列表页的路由配置,确保和详情页路由配合使用:

path('users/', views.users_list, name='users_list'),
path('users/<int:id>', views.user_info, name='user_info'),

4. 验证未登录访问权限

确保两个视图都没有添加@login_required装饰器,保证未登录用户可以正常访问用户列表和详情页。

关键说明

  • 模板拆分后,列表页负责展示用户跳转入口,详情页专注单个用户资料展示,逻辑更清晰。
  • 使用target_user代替user作为详情页变量名,彻底避免和Django默认的request.user上下文冲突,无论登录状态都能正确展示所选用户信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:27:55