一鹦蠕、圖片顯示
1、在models.py中在抛,需建立模型钟病,這里使用了ImageField字段,用來(lái)存儲(chǔ)圖片路徑刚梭,這個(gè)字段繼承了FileField字段肠阱,本質(zhì)上是一樣的。這里Image.Field的默認(rèn)max_length=100望浩,我們可以根據(jù)需求自己指定辖所。upload_to用于指定上傳到哪個(gè)路徑下惰说。
PS:?使用ImageField首先需要裝Pillow磨德。
1?pip install Pillow
2、建立好模型吆视,需要進(jìn)行遷移操作典挑,python manage.py makemigrations??,python manage.py migrate
3啦吧、在settings.py中您觉,設(shè)置MEDIA_URL和MEDIA_ROOT
MEDIA_URL?=?'/media/'
MEDIA_ROOT?=?os.path.join(BASE_DIR,?'media')
?告訴Django,媒體文件的位置在哪里授滓。這樣就和數(shù)據(jù)庫(kù)存儲(chǔ)的路徑相對(duì)應(yīng)了琳水,具體就是MEDIA_ROOT指定目錄,upload_to就是在這個(gè)目錄下進(jìn)行操作
4般堆、顯示圖片(圖片調(diào)用):?
為了能夠方便錄入數(shù)據(jù)在孝,使用django后臺(tái)管理,創(chuàng)建管理頁(yè)面淮摔,python manage.py createsuperuser?根據(jù)提示進(jìn)行創(chuàng)建私沮,在app下admin.py中將需要上面創(chuàng)建的模型進(jìn)行添加?admin.site.register(Test),開(kāi)啟runserver和橙,打開(kāi)admin頁(yè)面仔燕,就可以創(chuàng)建具體的數(shù)據(jù)了。
需要調(diào)用的話魔招,在view.py中將數(shù)據(jù)進(jìn)行傳遞
curr_article = Test.objects.all()
return?render(request,?'detail.html', {'curr_article':curr_article})
在模板中將圖片展現(xiàn)出來(lái):
為了html模板能正確找到MEDIA_URL晰搀,TEMPLATES中導(dǎo)入相關(guān)的包:?'django.template.context_processors.media'
參考官方文檔即可,這樣圖片的url才是完整的,頁(yè)面就可以正常顯示圖片了
二办斑、上傳圖片
首先需要一個(gè)form外恕,enctype="multipart/form-data" method="post" 是必須要填寫(xiě)的,表示數(shù)據(jù)不經(jīng)過(guò)編碼,直接上傳吁讨。{%csrf_token%}也是post時(shí)髓迎,django強(qiáng)制要求的。
<form enctype="multipart/form-data"?action="#"?method="post">
????{%?csrf_token?%}
????<input?type="text"?name="name">
????<input?type="file"?name="img">
? ? <input?type="submit"?value="upload">
</form>
然后去views.py對(duì)視圖函數(shù)進(jìn)行操作
if?request.method?==?'POST':
????file?=?request.FILES['img']
????if?file:
????????new_img?=?Test(
????????????name=request.POST.get('name'),
????????????image=file? )
????????new_img.save()
與普通的數(shù)據(jù)不同建丧,這里用了request.FILES字典的方式去獲取文件排龄,然后創(chuàng)建新的數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)中