Django 本地專案設定DEBUG=False靜態檔案與上傳檔案404不存在錯誤解決
阿新 • • 發佈:2020-12-17
Django 本地專案設定DEBUG=False靜態檔案與上傳檔案404不存在錯誤解決
生產環境:
python=3.8
django=3.1
預設配置django在DEBUG=True時通過’django.contrib.staticfiles’ (app) 搜尋靜態檔案;使用者上傳則需編寫程式碼手動配置
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
]
# 使用者上傳媒體檔案(使用者頭像)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
當DEBUG=False時會發生靜態檔案與使用者上傳檔案404不存在
解決方案: 配置django.views.static.serve()為靜態檔案與使用者上傳檔案提供服務
一 .設定settings
# project/setting.py
DEBUA=False
# 靜態檔案
STATIC_URL = '/static/'
# collectstatic收集靜態檔案的絕對路徑
STATIC_ROOT = os.path.join(BASE_DIR, "static_root" )
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
# 媒體檔案地址:使用者上傳檔案儲存/訪問的位置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
二.設定urls
# app/urls
from django.conf import settings
from django.conf.urls.static import static
from django.urls import path, re_path
urlpatterns = [
re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}, name='static'),
re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]
三.執行python manage.py collectstatic命令(收集靜態檔案)
# 終端命令
python manage.py collectstatic
四.啟動專案 檢視是否顯示成功
python manage.py rusnerver