環境:Django2.0 Python3.6.4html
創建項目,數據庫設置,就不說了。python
直接上代碼:數據庫
在models.py中,須要創建模型,這裏使用了ImageField字段,用來存儲圖片路徑,這個字段繼承了FileField字段,本質上是同樣的。這裏Image.Field的默認max_length=100,咱們能夠根據需求本身指定。upload_to用於指定上傳到哪一個路徑下。django
PS: 使用ImageField首先須要裝Pillow。app
1 pip install Pillow 函數
1 class Test(models.Model): 2 name = models.CharField(max_length=50) 3 image = models.ImageField(upload_to='logo') 4 def __str__(self): 5 return self.name
創建好模型,須要進行遷移操做,post
1 python manage.py makemigrations 2 python manage.py migrate
在settings.py中,設置MEDIA_URL和MEDIA_ROOT編碼
MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
咱們須要告訴Django,媒體文件的位置在哪裏。這樣就和數據庫存儲的路徑相對應了,具體就是MEDIA_ROOT指定目錄,upload_to就是在這個目錄下進行操做。url
爲了可以方便錄入數據,咱們使用django後臺管理,建立管理頁面。spa
python manage.py createsuperuser
根據提示進行建立。在app下admin.py中將須要上面建立的模型進行添加。
admin.site.register(Test)
開啓runserver,打開admin頁面,就能夠建立具體的數據了,將圖片進行添加。
咱們須要調用的話,須要在view.py中將數據進行傳遞。
img = Test.objects.all() return render(request, 'home.html', {'img':img})
在視圖函數中加入,上面兩句。在模板中,將圖片展示出來:
{% for i in img %} <img src="{{ MEDIA_URL }}{{ i.image }}"> {% endfor %}
這裏{{ MEDIA_URL }}是必需要的,由於數據庫取出來的地址是/logo/img001.png這種,路徑不完整,咱們存儲的路徑上/media/logo/img001.png
但到這裏仍是不能正常顯示圖片,會顯示404,是由於圖片的url也是須要經過django進行指派,咱們還須要在urls.py進行設定。
爲了html模板能正確找到MEDIA_URL,TEMPLATES中導入相關的包。
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.media',#### add here ], }, }, ]
直接參考官方文檔便可。這樣圖片的url纔是完整的,咱們的頁面才能夠正常顯示圖片。
咱們可能須要用戶上傳本身的頭像,或者相冊,這裏作一個簡單的示範:
首先須要一個form,enctype="multipart/form-data" method="post" 是必需要填寫的,表示數據不通過編碼,直接上傳。{%csrf_token%}也是post時,django強制要求的。
<form enctype="multipart/form-data" action="#" method="post"> {% csrf_token %} <input type="text" name="name"> <input type="file" name="logo"> <input type="submit" value="upload"> </form>
而後須要去views.py對視圖函數進行操做。
if request.method == 'POST': file = request.FILES['logo'] if file: new_img = Test( name=request.POST.get('name'), image=file ) new_img.save()
與普通的數據不一樣,這裏使用了request.FILES字典的方式去獲取文件,而後建立新的數據,並保存到數據庫中。