求助:如何在Django Admin中正确显示图片?
Django Admin图片显示异常的解决方法
问题1:图片路径硬编码错误
你的image_tag方法里硬编码了/users/media/路径,这和配置的MEDIA_URL(/media/)不符,而且self.user_image.url已经包含了正确的媒体文件路径,直接使用即可:
修改models.py中的image_tag方法:
def image_tag(self): return mark_safe(f'<img src="{self.user_image.url}" width="50" height="50" />')
问题2:上传路径的月份格式错误
image_path函数里用了%M(代表分钟)来格式化月份,正确的月份格式应该是%m(两位数字月份),这会导致图片实际存储路径和预期不符,无法被找到:
修改image_path中的格式化参数:
return 'profile_pic/{year}-{month}-{imageid}-{basename}-{randomstring}{ext}'.format( imageid=instance, basename=basefilename, randomstring=randomstr, ext=file_extension, year=_now.strftime('%Y'), month=_now.strftime('%m'), day=_now.strftime('%d'))
问题3:Django Admin未配置显示图片字段
你需要在admin.py中注册User模型,并将image_tag添加到显示字段中,否则Admin界面不会渲染这个图片标签:
创建/修改users/admin.py:
from django.contrib import admin from .models import User @admin.register(User) class UserAdmin(admin.ModelAdmin): # 在列表页显示图片标签 list_display = ('user_email', 'user_fname', 'user_lname', 'image_tag') # 在详情页显示图片标签(设为只读避免编辑) readonly_fields = ('image_tag',)
问题4:默认图片路径检查
你的user_image字段默认值是profile_pic/image.jpg,请确保这个文件存在于MEDIA_ROOT/profile_pic/目录下(即项目根目录的media/profile_pic/image.jpg),否则默认图片会显示异常。
问题5:确保开发环境DEBUG模式开启
static()方法仅在DEBUG=True时生效,检查settings.py中的配置:
DEBUG = True
完成以上修改后,重启Django开发服务器,重新上传图片即可在Admin界面正常显示。
内容的提问来源于stack exchange,提问作者nce
相关产品推荐
相关产品推荐

