Django靜態文件的獲取,以及對static和media目錄設置的一些思考

Django直接獲取靜態資源文件是不行的,會報錯。
添加靜態資源文件夾static,設置靜態文件根目錄後

INSTALLED_APPS = [
    ...
    'django.contrib.staticfiles',
    ...
]

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'
# 可收集靜態文件到static文件夾,便於訪問
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

配置完成後就可以通過下面的代碼調用靜態資源了。圖片、css、js文件。

{% load static %}

...
...
<img class="author_img rounded-circle" src="{% static 'image/blog/author.png' %}" alt="" >

但是上傳到media中的文件可以不通過這種方式調用。但是前提是也要配置media的文件根路徑和根目錄。

MEDIA_URL = '/media/'  # 訪問文件的url根路徑
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # 上傳文件存儲根目錄

然後可以通過如下方法調用。

<img class="img-fluid" src="/media/{{ detop_view.cover_photo  }} " alt="post">

可以注意到這裏資源引用沒有用{% static ... %},實際上只要這樣子在settings.py文件中配置了相關路徑和目錄,就可以通過這種方式引用。

要是別的靜態文件都通過這種方法引用,對於小項目這不是什麼問題,你可以將靜態文件放在任何你的web服務器能夠找到的地方。但是對於大型項目,尤其是那些包含多個app在內的項目,處理那些由app帶來的多套不同的靜態文件是個麻煩活。但這正是django.contrib.staticfiles的用途:它收集每個應用(和任何你指定的地方)的靜態文件到一個統一指定的地方,並且易於訪問。

media目錄下一般放上傳的文件,在django項目部署到服務器的時候,會輸入python manage.py collectstatic收集靜態資源文件,所以與static目錄不衝突,而且media中的文件可能還會被刪除。因此後期用戶上傳的文件不放在static目錄下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章