1. 程式人生 > 程式設計 >快速解決Django關閉Debug模式無法載入media圖片與static靜態檔案

快速解決Django關閉Debug模式無法載入media圖片與static靜態檔案

開發時,通常開啟Debug模式會快速定位開發時的一些問題。

專案開始部署時,關閉Debug模式,url.py路由靜態檔案和圖片寫法:

# url.py
from django.views import static
from django.conf import settings
#路由靜態檔案和圖片
urlpatterns = [
 url(r'^static/(?P<path>.*)$',static.serve,{'document_root': settings.STATIC_ROOT},name='media')
 url(r'^media/(?P<path>.*)$',{'document_root': settings.MEDIA_ROOT},name='media')
]

補充知識: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="快速解決Django關閉Debug模式無法載入media圖片與static靜態檔案" >

但是上傳到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目錄下。

以上這篇快速解決Django關閉Debug模式無法載入media圖片與static靜態檔案就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。