django静态文件配置

下载了个网页模板,建好Django工程,runserver后页面不显示css,jpg之类的静态文件。找了一下网上的解决方案,照着做也没对,主要是他们没说为什么要这么做,每个人搭建的环境不一样,解决的方法肯定也不完全一样。这里把解决的思路写下来,供大家参考。

 

1. 静态文件丢失是因为文件路径找不到。server端会有如下提示

[21/Sep/2014 11:28:01] "GET /static/img/f.png HTTP/1.1" 404 1941
[21/Sep/2014 11:28:01] "GET /template/static/css/style.css HTTP/1.1" 404 1980
[21/Sep/2014 11:28:01] "GET /static/img/r.png HTTP/1.1" 404 1941
[21/Sep/2014 11:28:01] "GET /static/img/t1.png HTTP/1.1" 404 1944

2. 需要修改settings.py文件中的STATIC_ROOT, STATIC_URL, STATICFILES_DIRS三个配置项,但具体怎么修改就与各人搭建的环境有关了。

STATIC_URL配置的是匹配的静态文件请求的url,这与页面中的链接地址要一致。如html文件中的静态文件链接为/static/,则配置项为

* foo.html *
<link rel="stylesheet" type="text/css" href="/static/css/style.css">

* settings.py *
STATIC_URL = '/static/'

STATIC_URL的作用等同于在urls.py文件中匹配url地址请求

3. 当匹配到静态文件请求时,则会在STATICFILES_DIRS中查找静态文件,静态文件一般都是集中存放,在同一父目录下,因此可以设置STATIC_ROOT来减少重复输入。由于配置项不支持相对路径,只能使用绝对路径,考虑到移植的灵活性,STATIC_ROOT可写为

STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'template/static')

这里的__file__是settings.py文件,即以settings.py文件所在的目录出发,找到静态文件所处的目录。

4. 最后是静态文件所处的位置

STATICFILES_DIRS = (
    ('css', os.path.join(STATIC_ROOT, 'css')),
    ('img', os.path.join(STATIC_ROOT, 'img')),
)

每类静态文件设置为一个元组,元组第一项‘css’,‘img’等要与html中链接地址保持一致,不能出现配置的('img', ...),但请求的链接地址为:.../static/images/abc.jpg,而元组第二项的‘css’和‘jpg‘要与文件夹名一致。

 

posted @ 2014-09-21 11:58  牛而立  阅读(303)  评论(0编辑  收藏  举报