Django静态文件处理

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

首先在settings文件中,引用os模块:
[code]import os[/code]

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

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

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

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

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

最后就是如何在templates里使用静态文件了:
[code]
<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=""/>
[/code]
使用的时候注意 路径的开头需要加上/  

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

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

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

(完)

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

------------------------------------- 下面的这个也供参考一下 -------------------------------------------------
[quote]
方法1:

由于在页面中要使用CSS,JS及图片文件这就用到了静态文件处理的问题

Django处理静态文件太烦了,我把步骤贴一下

第一步在项目目录下的settings文件里加一项:

STATIC_PATH='D:/WebSite/Django/myclass/jy0203/media'

里面的值静态文件所在目录

第二步在项目目录下的urls文件里加二行:

from myclass import settings

在 urlpatterns里加一句(r'^site_media/(?P.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_PATH}),

第三步在页面文件里更改静态文件的路径如:

其中jy0203.css是放在D:\WebSite\Django\myclass\jy0203\media\css下的

这样子就可以了

-----------------------------------------------------------------------------------------

方法2:

1.在项目目录下的settings文件里加一项:

STATIC_PATH='./media'       #静态文件所在目录

2.在项目目录下的urls文件里加一项:

from myproject import settings  #myproject为本工程名
在 urlpatterns里加一句(r'^site_media/(?P.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_PATH}),

3.在页面文件中,做如下设置:

如果用js,css之类的则在和之间加上:

即可

如果用图片,flash之类则
Django静态文件处理


原始出处和作者信息及本声明
http://hekun06.blogbus.com/logs/12663300.html

[/quote]

分享:

扫一扫在手机阅读、分享本文

请发表您的评论