**管理静态文件(比如:图片,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/**)。