django MEDIA_ROOT 和MEDIA_URL


Django media MEDIA_URL MEDIA_ROOT 的配置

Django中media文件夾是我們文件(比如頭像、文件、視頻等)數據十分重要的存放處,這里以用戶頭像的上傳以及media文件的訪問為例為大家詳細講解下media的相關實例。 在Django項目的settings.py文件中,我們可以配置兩個關於media的參數:MEDIA_ROOTMEDIA_URL,下面我們就文件的上傳與訪問一一對這兩個參數進行講解:

Django 高級實戰編程

Django高級實戰 開發企業級問答網站 項目結合:需求分析/Django高級用法/算法/設計模式/TestCase測試/雲計算服務

Django開發企業實戰 面向就業/升職(中高級教程)

視頻教程分享地址: 

文件的上傳

首先我們在自己的Django項目中創建一個media文件夾:

 

然后在settings.py中設置MEDIA_ROOT

MEDIA_ROOT = os.path.join(BASE_DIR,'media')

接着在urls.py中設置media路由的相關配置:

from django.urls import path,re_path from django.views.static import serve from cnblog import settings ##media配置——配合settings中的MEDIA_ROOT的配置,就可以在瀏覽器的地址欄訪問media文件夾及里面的文件了 re_path(r'media/(?P<path>.*)$',serve,{'document_root':settings.MEDIA_ROOT}),

有了上面這個路由設置,我們就可以在瀏覽器的地址欄根據media文件夾中文件的路徑去訪問對應的文件了(需要注意的是為了保證安全,默認情況下Django項目中各目錄的文件是不能通過地址欄去訪問的)。

當然,我們這里實現的是文件上傳的功能,需要將文件信息傳給數據庫保存,models.py文件中的內容如下:

class UserInfo(models.Model): nid = models.AutoField(primary_key=True) ##頭像是一個FileField——注意這里必須是“相對路徑”,不能是/avatars/這樣的絕對路徑 avatar = models.FileField(upload_to='avatars/',default='avatars/default.jpg')

我們用FileField存放上傳的文件,這里需要注意:media文件夾是我們上傳文件的 根目錄,如果我們想再為這個“根目錄”指定“子目錄”的話需要通過參數upload_to去指定,也就是說,我們上傳的文件會保存在 /media/avatars目錄 下,后面的參數default表示默認圖像————比如說我們想要上傳頭像,用戶不指定頭像的時候就用default參數指定的圖片。

這里省略模板與視圖函數的實現,只說明media參數的用法

當我們將圖片上傳到服務器后,就會在我們指定的目錄看到上傳的文件了:

 

文件的訪問

文件的訪問簡介

其實,當我們在上面進行了MEDIA_ROOT與路由的相關配置后,在瀏覽器輸入文件的路徑就可以查看對應的文件了。比如我們想查看上圖中的222.jpg文件,可以在程序運行的時候在地址欄輸入:

http://127.0.0.1:8000/media/avatars/222.jpg

這樣就可以顯示這個圖片了。

但是實際中,用戶不可能去地址欄輸入文件路徑的,我們做程序的目的就是盡最大限度的解放用戶的操作————那么,是否有一種方法能夠讓用戶僅僅點擊一下就能查看到對應的文件呢? 答案當然是肯定的!

這就用到了media的另外一個參數————MEDIA_URL

MEDIA_URL

在使用MEDIA_URL之前我們需要新增一條中間件,在settings.py文件的TEMPLATES參數中加入中間件:

django.template.context_processors.media

然后我們在settings.py中加入MEDIA_URL的參數:

MEDIA_URL = '/media/'

接着我們再新增一條測試路由:

##測試 path('aa/bb',views.aa),

視圖也比較簡單:

def aa(request): return render(request,'aa.html')

然后模板文件中我們做相應的功能:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="{{ MEDIA_URL }}avatars/222.jpg">查看media目錄下的一張圖片</a> <p>MEDIA_URL: {{ MEDIA_URL }}</p> </body> </html>

假如我們想實現點擊a標簽的文字出來222.jpg圖片,可以在href加上圖片的路徑,這里大家看到了,我們用模板語言{{ MEDIA_URL }}進行渲染,這里模板語言渲染出來的值其實就是我們在settings中設置的'/media/'。我們可以看一下演示效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM