1. 数据准备
在模板中使用如file、image等类型的字段
若有模板如下所示:
class User(AbstractUser):
# 头像
# upload_to为保存到响应的子目录中
avatar = models.ImageField(upload_to='avatar/%Y%m%d/', blank=True)
# 个人简介
user_desc = models.TextField(max_length=500, blank=True)
def __str__(self):
return self.username
有界面如下所示:
...
<div >头像</div>
<img src="{{ avatar }}" style="max-width: 20%;" ><br>
...
2. Media配置
1) 在settings.py中需做如下配置
- 配置 MEDIA_URL 访问路径,代表用户通过URL来访问这个本地地址的URL
# 媒体资源访问统一路由
MEDIA_URL = '/media/'
- 配置 MEDIA_ROOT 文件上传路径,设置用户上传文件的实际保存目录,该文件夹自动创建
# 媒体资源上传路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
2) 在项目url中需配置
urlpatterns = [
...
]
from django.conf import settings
from django.conf.urls.static import static
# 将/media/开头的url,转到实际的文件路径
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3. 使用
在django后台视图代码中,渲染页面
注意:最好返回media对象的url,这样会加上 /media/前缀,不然会存在访问路径的问题。
class CenterView(LoginRequiredMixin, View):
"""
用户中心
"""
def get(self, request):
"""
获取用户信息
:param request:
:return:
"""
user = request.user
user_info = {
'username': user.username,
# 注意,这里需要 返回url,不然是数据库存储的路径,没有加 media前缀
'avatar': user.avatar.url if user.avatar else None,
'user_desc': user.user_desc
}
return render(request, 'center.html', context=user_info)