- 安裝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 }}')">