第九章、模板詳解 -- 上傳文件

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章