受Django版本更新的影响,其静态文件配置很乱,网上有各种说法,其实大多有道理的,只是没说明是针对哪个版本的Django。但1.4版本(可能包括其之后的版本)静态文件配置相当简单,在此记录下。
开发环境
以Django 1.4.5版本举例,在Pycharm 2.7.3上开发(为Pycharm打下广告,这货还真不赖,对Django的支持相当好,就连移动模板位置她都会自动跟踪),步骤如下:- 新建Django project untitled,
- 再用manage.py startapp hello建一个hello app,
- 最后在hello app下建一个static目录用来存放静态文件,
- 运行manage.py runserver,访问http://127.0.0.1:8000/static/a.txt,就成功访问静态文件了,
- 目录结构如下:
│ manage.py
│
├─hello
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └─static
│ a.txt
│
├─templates
└─untitled
settings.py
urls.py
wsgi.py
__init__.py
以上的静态文件访问无需对Django做任何配置,因Django自动开启了settings.py文件下INSTALLED_APPS的'django.contrib.staticfiles'。这里并未在urls.py里设置以下的代码,虽网上很多说这是必需的,但至少在1.4版本下是非必需的
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
现在能够确认的是Django处理静态文件的是下面这个库文件:
\Lib\site-packages\django\contrib\staticfiles\finders.py
生产环境
生产环境下一般是把静态文件放在项目根目录下的static目录下。以百度应用引擎(BAE)为例:
- 在项目根目录下创建如上面的的示例代码中的目录static,并在settings.py中相应设置目录
- 运行Django脚本manage.py collectstatic,收集所有静态文件至其之下,方便服务器处理
- 在BAE的app.conf中配置静态文件映射,
PS:测试过程中发现BAE竟对静态文件的后缀名大小写敏感,本地开发环境下却没有此现象。
参考:
http://blog.yangyubo.com/2012/07/26/django-staticfiles/
http://www.cnblogs.com/bourneli/archive/2013/01/21/2869327.html