Django有提供檔案系統支援,在Admin站點中可以輕松上傳圖檔。使用Admin站點儲存圖檔,需要安裝Python的圖檔操作包
pip install Pillow
1 配置
預設情況下,Django會将上傳的圖檔儲存在本地伺服器上,需要配置儲存的路徑。我們可以将上傳的檔案儲存在靜态檔案目錄中,如我們之前設定的static_files目錄中在settings.py 檔案中添加如下上傳儲存目錄資訊
MEDIA_ROOT=os.path.join(BASE_DIR,"static_files/media")
2 為模型類添加ImageField字段
我們為之前的BookInfo模型類添加一個ImageFiled
class BookInfo(models.Model):
...
image = models.ImageField(upload_to='booktest', verbose_name='圖檔', null=True)
upload_to 選項指明該字段的圖檔儲存在MEDIA_ROOT目錄中的哪個子目錄,進行資料庫遷移操作
python manage.py makemigrations
python manage.py migrate
3 使用Admin站點上傳圖檔
進入Admin站點的圖書管理頁面,選擇一個圖書,能發現多出來一個上傳圖檔的字段admin站點圖檔字段,選擇一張圖檔并儲存後,圖檔會被儲存在
static_files/media/booktest/
目錄下。
在資料庫中,我們能看到image字段被設定為圖檔的路徑
django admin圖檔上傳,更改路徑和圖檔名稱
1.自定義 上傳圖檔的儲存路徑和,圖檔名稱格式。
def upload_path_handler(instance, filename):
filename="ewn1.jpg"#圖檔名稱
return "photos/{id}/{file}".format(id=instance.photo.title, file=filename) #儲存路徑和格式
2.models
class Picture(models.Model):
title = models.CharField('圖檔标題',max_length=100)
image = models.ImageField('圖檔',upload_to=upload_path_handler, null =True, blank=True)
summary = models.CharField('說明',max_length=100)
photo=models.ForeignKey(Photo,verbose_name=u'相冊')