Django應用中的靜態文件處理

在平常開發中,咱們都是把Django的Debug模式打開,方便調試,在這個模式下,由Django內置的Web服務器提供靜態文件服務,不過須要進行一些配置,才能正確訪問。java

配置settings

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

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static_collected')
STATIC_URL = '/static/'

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

配置路由

from django.conf import settings
from django.urls import path, include
from django.conf.urls.static import static

urlpatterns = [
    ...
]

# 調試模式下的靜態文件服務
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

這樣就能夠在Debug模式下正常訪問靜態文件了,不過咱們在把應用部署到生產環境以後,爲了安全起見,不能開啓Debug模式,這個時候就須要使用nginx或者Apache之類的服務器來提供靜態文件服務。python

在這以前,還須要運行linux

python manage.py collectstatic

命令來把各個包中的靜態文件收集到咱們前面定義的STATIC_ROOT中,而後再把這個路徑交由nginx~android

nginx配置

# Django media
location /media/  {
    alias /path/to/django/static/media/;  # your Django project's media files - amend as required
}

location /static/ {
    alias /path/to/django/static_collected/; # your Django project's static files - amend as required
}

同時關閉Django的Debug模式,這樣靜態文件就都會使用nginx來提供訪問~nginx

歡迎交流

我整理了一系列的技術文章和資料,在公衆號「程序設計實驗室」後臺回覆 linux、flutter、c#、netcore、android、kotlin、java、python 等可獲取相關技術文章和資料,同時有任何問題均可以在公衆號後臺留言~django

相關文章
相關標籤/搜索