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

Django登录用户头像不显示问题:需实现自定义/默认头像切换

Django登录后头像无法正常显示的修复方案

核心问题梳理

  1. 视图传递的变量名与模板引用不匹配
  2. 模板错误使用未定义变量 i
  3. 模型头像字段未设置允许空值,违背「未上传显示默认头像」的需求
  4. 需确保媒体文件访问配置正确

1. 修正视图变量传递

将视图中传递的变量键名改为更直观的 user,保持模板引用一致性:

def header(request):
    if request.session.has_key('id'):
        user_id = request.session['id']
        user = registertb.objects.get(id=user_id)
        return render(request, 'headerfooter.html', {'user': user})
    else:
        return render(request, 'headerfooter.html')

2. 修正模板变量引用

统一使用视图传递的 user 变量,修正头像判断与渲染逻辑:

<li>
    <p style="width:30px; height:30px; margin-left: 200px; margin-top: 10px;color: black;">{{ user.User_name }}</p>
    {% if user.user_image %}
        <img src="{{ user.user_image.url }}" style="height: 50px; width: 50px;" alt="User Avatar">
    {% else %}
        <img src="/media/image/New folder/default-avatar-profile.jpg" style="height: 50px; width: 50px;" alt="Default Avatar">
    {% endif %}
 </li>

3. 修正模型头像字段配置

添加 blank=True, null=True,允许用户未上传头像:

class registertb(models.Model):
    User_name=models.CharField(max_length=300)
    User_email=models.CharField(max_length=300)
    user_image=models.ImageField(upload_to='image/', blank=True, null=True)
    password=models.CharField(max_length=400)
    conf_password=models.CharField(max_length=300)

4. 确保媒体文件访问配置正确

在项目 settings.py 中添加:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

在项目根 urls.py 中添加媒体文件路由:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 现有路由配置
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:33:14