第一部分:在开发环境下
1.说明
本篇旨在阐明如何在开发环境下为django项目配置static files,所谓开发环境是指以manage.py run server指定的服务器发布,且settings.DEBUG = True,此时将由django程序处理静态文件。
2.django处理静态文件流程
django提供了django.contrib.staticfiles app模块来帮助我们发布静态文件,其响应的流程如下:
1,接收到例如http://www.dataliu.com/static/image/picture.jpg的url,如果STATIC_URL = /static/, 则其交由django.contrib.staticfiles App处理。
2.django.contrib.staticfiles先去STATICFILES_DIRS中指定的目录下寻找image/picture.jpg,如果找不到就去各app目录下的static/下寻找,将先找到的文件发布出去。
3.django静态文件配置
熟悉了django处理静态文件的流程,可以知道要配置静态文件,需要配置STATIC_URL和STATICFILES_DIRS两个属性。以及将文件放到相应目录。配置流程如下:
把django.contrib.staticfiles添加到settings.py中的INSTALLED_APPS中.
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #添加该文件!!! )
在settins.py中定义STATIC_URL, 例如:
STATIC_URL = '/static/'
注意:在django1.4以前,需要自己为django.contrib.staticfiles配url,而django1.5以后不需要。
#在django1.4中urls.py 底部加上:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()将静态文件存储到各app目录下的static目录下(目录名必须为static),例如
app/static/image/picture.jpg
如果需要使用一些各app公用的静态文件,则在项目目录下创建一个目录,然后把该目录的路径添加到STATICFILES_DIRS中,例如。
# 在settings.py中添加 STATICFILES_DIRS = ( os.path.join(BASE_DIR, "common_static"), # 还可以添加更多路径 )
最终结果,一般配置完静态文件后,在settings.py中会有如下一段:(STATIC_ROOT的作用在生产环境时介绍。)
... INSTALLED_APPS = ( ... 'django.contrib.staticfiles', #添加该文件!!! ) ... # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.8/howto/static-files/ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static') STATICFILES_DIRS = ( os.path.join(BASE_DIR, "common_static"), ) ...
第二部分:在生产环境下
1. 说明:
在生产环境下,一般把静态文件交由Nginx等服务器发布,不由django程序处理。此时需要做的就是把所有静态文件拿出来并整理,然后给其他服务器发布。
2. 配置静态文件
第一步:收集静态文件
然而django不需要自己手动去收集并整理静态文件,使用如下指令,会把以前放在app下static中的静态文件全部拷贝到 settings.py 中设置的 STATIC_ROOT 文件夹中,包括admin App中用到的静态文件
python manage.py collectstatic
第二步:交给其他服务器发布
发布的方法很多,不同服务器不一样,可以自行google,这里不过多赘述。
相关文章
官方文档:https://docs.djangoproject.com/en/1.8/howto/static-files/
自强学堂:http://www.ziqiangxuetang.com/django/django-static-files.html