**管理靜態文件(比如:圖片,JavaScript文件,CSS文件)**
網站常常需要提供額外的文件服務,比如圖片,JavaScript文件,或者CSS文件。在Django中,我們稱這些文件為“靜態文件”。Django提供**django.contrib.staticfiles**來管理它們。
**配置靜態文件**
1 在**settings.py**中,確保**INSTALLED_APPS**中含有**django.contrib.staticfiles**
2 在**settings.py**中,定義**STATIC_URL**,例如:
~~~
STATIC_URL = '/static/'
~~~
3 在模板文件中,要么硬編碼路徑,比如**/static/my_app/example.jpg**。或者更好的辦法就是,使用**static**模板標記結合給出的相對路徑,根據配置的**STATICFILES_STORAGE**字段生成資源URL路徑(這種方式,可以使你方便的將資源切換由CDN提供)。
~~~
{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image"/>
~~~
4 將你的靜態文件放在app下的**static**目錄中,比如**my_app/static/my_app/example.jpg**
>[success]**文件服務**
>除了以上這些配置步驟,你還需要實際開啟對這些靜態文件的服務。
>在開發期,如果你使用**django.contrib.staticfiles**,當**DEBUG**設為**True**時,運行**runserver**時會自動開啟該服務(詳見**[django.contrib.staticfiles.views.serve()](https://docs.djangoproject.com/en/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve)**)。
>這種方法是**十分低效**的,而且可能并不安全,所以它**非常不適合**正式環境。
>查看[部署靜態文件](https://docs.djangoproject.com/en/1.10/howto/static-files/deployment/),可以知道在產品環境中,正確管理靜態文件的策略。
你也許會有一些靜態文件,它們并不隸屬于任何一個特定的應用。除了在應用目錄下建立**static/**文件夾,你可以在**settings.py**中定義一個文件夾列表(**STATICFILES_DIRS**),Django也會從這里尋找靜態文件,比如:
~~~
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
]
~~~
可以查看**STATICFILES_FINDERS**設置的[文檔](https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-STATICFILES_FINDERS),弄清楚**staticfiles**模塊如何尋找你的文件。
>[info] 靜態文件命名空間
我們可能會把靜態文件直接放在**my_app/static/**目錄下,而不是再建一個子目錄**my_app**,然后將靜態文件放在**my_app/static/my_app/**這個路徑下,這樣做也許會僥幸工作正常,但這并不是一個好的做法。Django總是使用匹配名字的第一個靜態文件,如果你在另一個應用中恰好有一個同名的靜態文件,Django就無法區分它們。我們需要告訴Django哪個是正確的文件,最簡單的方式就是使用命名空間來保證。即:將靜態文件放在以應用名命名的子目錄下(**my_app/static/my_app/**)。