第九章、模板详解 -- 上传文件

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

 

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