1. Django 靜態文件分類
Django 靜態文件分爲兩類:static 和 media。php
- static: 是頁面引用的 JS、CSS、Image 等文件
- media:是用戶上傳的文件
2. 生產環境配置
生產環境,一般配置 Nginx 轉發靜態文件請求,而 Django 處理動態請求。css
nginx 配置html
location /media {
alias /path/to/project/media; } location /static { alias /path/to/project/static; }
在部署時,須要執行 python manage.py collectstatic 命令將 INSTALLED_APPS 列表內的所有 Django App 的靜態資源收集到 STATIC_ROOT 指定的目錄。python
3. 開發環境配置
3.1 配置和使用
第一步,在 INSTALLED_APPS 中加入 ‘django.contrib.staticfiles’nginx
第二步,在 urls.py 中新增以下路由,僅在 settings.DEBUG==True 時生效,正式環境使用 Nginx 轉發。django
if settings.RUN_MODE == 'DEVELOP': urlpatterns += patterns('', url(r'^media/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': settings.MEDIA_ROOT, }), url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), )
第三步,在 settings 文件 TEMPLATES – OPTIONS – context_processors 配置中添加瀏覽器
django.template.context_processors.static django.template.context_processors.media
第四步,在模板中使用 STATIC_URL、MEDIA_URL 變量bash
static 文件ide
<img src="{{STATIC_URL}}test.png> # 或者 {% load staticfiles %} <img src="{% static 'img/logo.png' %}">
media 文件url
<source src="{{ MEDIA_URL }}movie.ogg" type="video/ogg">
3.2 處理流程
第一步,Django 收到一個靜態文件的請求,例如,/static/css/main.css
第二步,Django 在 STATICFILES_DIRS 中尋找 css/main.css 這個文件
若是第二步找到了,直接返回該文件,不然在 INSTALLED_APPS 列表內所有 Django App 的 static 目錄下繼續查找。
4. static 相關變量
4.1 STATIC_ROOT
指定執行 python manage.py collectstatic
命令時,靜態文件存儲的目錄
4.2 STATIC_URL
URL 映射,指定靜態目錄的 URL,默認值爲:
STATIC_URL = '/static'
4.3 STATICFILES_DIRS
STATICFILES_DIRS 是一個列表,指定工程裏哪些目錄存放了靜態文件。
4.4 STATICFILES_STORAGE
使用 python manage.py collectstatic
命令收集靜態文件時,Django 使用的文件存儲引擎。若是須要將靜態文件託管在其餘地方,那麼須要修改 STATICFILES_STORAGE 參數,實現相應的方法便可。默認值爲:
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
4.5 STATICFILES_FINDERS
在開發環境下 django.contrib.staticfiles 查找靜態資源的順序取決於 STATICFILES_FINDERS 的配置,STATICFILES_FINDERS 默認配置以下:
STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', )
- django.contrib.staticfiles.finders.FileSystemFinder 用來從 STATICFILES_DIRS 指定的路徑中查找靜態文件
- django.contrib.staticfiles.finders.AppDirectoriesFinder 是從 INSTALLED_APPS 列表內所有 Django App 的 static 目錄中查找靜態文件
5. media 相關變量
5.1 MEDIA_ROOT
MEDIA 存儲的是用戶上傳的文件,好比在 Model 裏面的FileField 的文件。若是定義MEDIA_ROOT=C:\media,那麼File = models.FileField(upload_to=’file/‘),上傳的文件就會被保存到 C:\media\file
在 settings 裏面設置的 MEDIA_ROOT必須是絕對路徑,能夠這樣寫:
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR, PROJECT_MODULE_NAME = os.path.split(PROJECT_ROOT)
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media/')
5.2 MEDIA_URL
MEDIA_URL 是指從瀏覽器訪問時的 URL 前綴,例如:
MEDIA_ROOT='C:\media\' MEDIA_URL='/mymedia/'
當瀏覽器訪問:http://localhost/mymedia/1.png 就是訪問 c:\media\1.png
轉:https://www.ziji.work/django/django2-x-static-files-setting.html