文件的上傳
MEDIA_ROOT = os.path.join(BASE_DIR,'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}),
固然,咱們這裏實現的是文件上傳的功能,須要將文件信息傳給數據庫保存,models.py
文件中的內容以下:
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
##頭像是一個FileField——注意這裏必須是「相對路徑」,不能是/avatars/這樣的絕對路徑
avatar = models.FileField(upload_to='avatars/',default='avatars/default.jpg')
當咱們將圖片上傳到服務器後,就會在咱們指定的目錄看到上傳的文件了:
文件的訪問
文件的訪問簡介
http://127.0.0.1:8000/media/avatars/222.jpg
這樣就能夠顯示這個圖片了。
可是實際中,用戶不可能去地址欄輸入文件路徑的,咱們作程序的目的就是盡最大限度的解放用戶的操做————那麼,是否有一種方法可以讓用戶僅僅點擊一下就能查看到對應的文件呢?
答案固然是確定的!
django.template.context_processors.media
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標籤的href寫死呢,何須用模板語言去渲染?!
固然,兩者的效果當然同樣,可是當咱們的項目作大的時候,文件目錄的組織形式會愈來愈複雜,在settings中設置這樣一個或者幾個固定的、容易記憶的變量去存儲複雜的文件路徑,咱們在開發的時候就不會爲這些「雜事」去動腦筋了,這樣可以極大的提升咱們的編程效率。