關於Django中Static和Media的設置問題(尤其是css和js靜態文件加載的問題),網上有很多回答,但是發現有相當一部分回答並不能解決問題。有的可能是Django版本問題,有的是把media和static搞混了。下面是關於Django 1.9+ 中static與media的總結:
區別:
- Static是不變的,形成網站的核心部件,如 CSS文件,JS文件,背景圖片等;
- Media是變動的,由用戶定義的文件,如 用戶頭像, 用戶上傳的圖片或視頻等。
配置方法:##
1.Static
- 在項目根目錄新建static文件夾
- 在setting.py中設置:
- STATIC_DIR=os.path.join(BASE_DIR,'static')
- STATICFILES_DIRS=[STATIC_DIR,] (當由多個靜態文件目錄時,可加入)
- 在模板文件的 下面(不要寫到最開頭),寫入{% load staticfiles %}
- 在模板文件中引用:{% static '<static文件夾中的目標文件路徑>' %}
2. Media
- 在項目根目錄新建media文件夾
- 在setting.py中設置
- MEDIA_DIR=os.path.join(BASE_DIR,'media')
- MEDIA_ROOT=MEDIA_DIR
- MEDIA_URL='/media/'(前后都有斜杠)
- TEMPLATES設置中的context_processor選項中加入:'django.template.context_processors.media',
- 在項目urls文件中
- from django.conf import settings
- from django.conf.urls.static import static
- 在文件最后加上: +static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
- 在模板文件中引用: