Django静态文件的配置(二)

本文详细介绍了Django项目中静态文件的配置方法,包括开发环境和产品环境的区别配置,涉及settings.py和urls.py的设置,以及如何在模板中正确引用静态资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明

转自:http://2goo.info/blog/panjj/Django/2010/10/07/131


一直在寻找产品部署环境和开发环境时,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静态文件拷贝到一个名叫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,是避免和后台的静态路径冲突而我们应用的静态文件无法得到正常解析。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值