- 安装Pillow模块,使用其中的
models.ImageField
函数
- 修改
settings.py
文件
media
是服务器上用来保存图片文件的根目录,第1次有文件上传时自动创建
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
MEDIA_URL = '/media/'
- 修改工程
urls.py
文件的urlpatterns
配置项
增加+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
,关联MEDIA_ROOT
和MEDIA_URL
注意:static
对应的导入包应为from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^$', views.login),
url(r'^personal/', include('personal.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- 修改
models.py
文件
在模型类中增加保存上传文件路径的字段
images
会自动创建在media
目录下
user_img = models.ImageField(upload_to='images', null=True)
- 修改模板文件
文件上传通过form表单完成,method必是post
,必须有enctype
,input类型为file
<form action="/personal/upload/" method="post" enctype="multipart/form-data">
<input type="file" name="img">
<button type="submit">上传</button>
</form>
- 修改应用
urls.py
文件,增加上传表单处理函数的url
url(r'^upload/$', views.upload),
- 修改
views.py
文件,增加表单处理函数
request.FILES.get('img')
完成从表单中获取文件数据,并上传到/media/images/
目录中
def upload(request):
p = PersonInfo.objects.get(user_id=2)
p.user_img = request.FILES.get('img') # 完成上传
p.save() # 将上传文件的存储路径存入数据表中
content = {
'img': p.user_img.url, # 将上传文件的路径以字符串形式传递给模板
}
return render(request, 'editPersonal.html', content)
- 修改模板文件,使用
{{ img }}
获得图片文件的路径
<div class="photo" style="background-image: url('{{ img }}')">
- end -