Django静态文件的配置

阅读量(8666)  |  发表 于 2010-10-07 15:19:09

一直在寻找产品部署环境和开发环境时,Django静态文件配置的差异化。比如说网站的css js和一些非程序相关的文件,我暂时看成是静态文件。我们怎么正确配置,才能让Django网站解析到静态文件呢?简明来说,要注意两个文件:settings.py  url.py。


首先在settings文件中,引用os模块:
import os

然后我们定义一个常量,项目的根目录地址:
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))

再者就是给MEDIA_ROOT赋值为:
MEDIA_ROOT= os.path.join(PROJECT_PATH,'static')
(注意,我们的静态文件在根目录下的static文件里,如果文件夹名不一样,join的参数改成 自己起用的名字)

settings.py 配置完了,urls.py呢?如下配置:
from django.conf import settings

url(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT },name="media"),

^static/(?P<path>.*)$的static,可以随自己喜欢的名字,建议参考Django最佳实践做法。也许urls配置很重要,稍微不小心,url经常解析不到真正的静态文件。之前喜欢使用media,比如^media/(?P<path>.*)$,结果老解析不到静态文件,还瞎捣鼓MEDIA_ROOT,终究还是没有解析成功,后来把media改成static,一下子成功了。注意不一定是static,只要不是media,应该就可以了。很奇怪,不知道是不是Django其他地方用到media了,比如Django的Admin。

最后就是如何在templates里使用静态文件了:

<script type="javascript/text" src="/static/js/config.js"></script>
<link rel="stylesheet" type="text/css" href="/static/css/contents.css"/>
<img src="/static/images/logo.ipg" alt=""/>

使用的时候注意 路径的开头需要加上/  

这样的配置,在开发环境中式能正常解析的,在产品部署环境中,只需修改settings文件的
MEDIA_URL 
ADMIN_MEDIA_PREFIX

把他们改成实际的域名
MEDIA_URL='http://www.XXX.com/static/'
ADMIN_MEDIA_PREFIX='http://www.XXX.com/static/admin/'

ADMIN_MEDIA_PREFIX后面的admn,可能有点差异,我们是把Django的admin静态文件拷贝到static文件夹里,名叫admin,(结构:static/admin/)。

补充:根据实际的实践中,发现ADMIN_MEDIA_PREFIX如果指定了后缀media或者static,比如:ADMIN_MEDIA_PREFIX='http://www.XXX.com/media/'或者ADMIN_MEDIA_PREFIX='http://www.XXX.com/static/';

urls.py应该另起一个后缀,比如:
url(r'^site_media/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.MEDIA_ROOT },name="site_media"),
我们指定了site_media作为后缀,而没有采用media和static,是避免和后台的静态路径冲突而我们应用的静态文件无法得到正常解析。

(完)

标签: 无标签

评论 (4)  •  发表博客  • 

分享到:

4 条评论

user

游客 renwofei423 说:
2010-10-08 01:25:08

最近更新了蛮多django 的文章 过来学习学习

user

游客 XD 说:
2012-03-09 08:50:57

请问多个 static 路径该如何设置呢?

user

游客 晨钟 说:
2012-05-30 02:06:37

谢谢你,讲得很清楚

user

游客 husw 说:
2012-06-22 04:41:48

写的很清楚,很详细! 感谢分享!

user

游客 WQESDFASDF 说:
2012-07-14 01:05:38

谢谢你啊!

user

游客 jim 说:
2012-12-10 05:46:44

为什么我按照你的做了,最后image没有加载,只是alt显示了?
可以帮我分析下么?

user

游客 2goo 说:
2012-12-10 03:53:06

Jim同学,不知道你现在使用Django哪个版本?如果是1.4,参考最近写的《简易配置Django的Static文件》:http://2goo.info/blog/panjj/Django/2012/11/18/544 使用之前,可以看看:http://2goo.info/blog/panjj/Django/2012/11/03/543

user

游客 dee 说:
2013-03-01 12:57:42

写得不错啊 谢谢分享

我要 评论