您的位置:首页 > 编程语言 > Go语言

django模板中使用静态文件的方法

2011-04-21 17:21 1296 查看
要在django中使用css、jpg等文件,要分开两种情况:开发环境及生产环境。对于开发环境,现就CSS文件的使用示范,按如下步骤设置:

1、我的项目目录是:f:/projects/www,我的应用在: f:/projects/www/dakki下,我的静态文件在: f:/projects/www/dakki/styles下,先在settings.py中导入os模块:import os。

2、在settings中添加如下变量:

STATIC_PATH = os.path.join(os.path.dirname(__file__), 'dakki/styles').replace('//','/')

3、然后在项目中的urls.py中的patterns字典内添加如下内容:

(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_PATH}),

4、然后可以在模板文件中按html引用外部CSS 文件一样引用你自己的CSS文件:

<link href="/static/base.css" rel="stylesheet" type="text/css"/>

5、注意颜色同样对应的变量。

对于生产环境,应该按这样设置:

先设置settings.py,如下:

import os.path

STATIC_PATH= os.path.join(os.path.dirname(__file__), 'js').replace('\\', '/')

在服务器中设置分不同类型的服务器软件,对于nginx,设置如下:

local ^~ {
alias /home/projects_pathname/javascript_path/;
access_log off;
}


对于apache,设置如下:

<Location "/static/">
SetHandler None
Order allow,deny
Allow from all
</Location>
Alias /static /home/projects_pathname/javascript_pathname
Alias /static/admin /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media

<Location "/static/admin">
SetHandler None
Order allow,deny
Allow from all
</Location>


==========================================================================

方法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<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_PATH}),

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

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

<link rel="StyleSheet" href="/site_media/wiki/base.css" type="text/css" />

即可

如果用图片,flash之类则

<img src="/site_media/top.bmp"/>

===============================

首先是在开发过程中,如果发布CSSS文件,jpg文件等,需要以下步骤。

第一:在项目的settings.py文件中,确保以下变量:

MEDIA_ROOT = 'E:/media' #你的静态文件的绝对目录,本来应该是用动态的,但是如果用APACHE部署的话,还是绝对路径好

STATIC_PATH="E:/media" #同上

第二:在urls.py文件中做以下工作:

from sjlt import settings

然后再目录urls加入:

(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_PATH}),

做完以上2个步骤,就可以在你的模板文件中使用JPG和CSS文件了。注意使用方法是这样的:

def login_view(request):

html="<img src=/site_media/logo.JPG></img>"

return HttpResponse(html)

这样就可以返回整个图片了,一定要在图片前边的路径加上=/site_media

=================================================

以上是普通的静态文件的发布方法,但是在你把DJANGO架设到APACHE上以后,如果你已经启用了django的admin模块,这个时候你就会发现,admin模块是不能被渲染后输出的,也就是说admin里面使用的所有csss,jpg都是无效的。这个时候怎么办呢?需要用到以下技巧:

在apache的配置文件中增加以下代码:

<Directory "C:\Python25\Lib\site-packages\django\contrib\admin\media">

Order Deny,Allow

Allow from all

</Directory>

Alias "/media" "C:\Python25\Lib\site-packages\django\contrib\admin\media"

<Location "/media">

SetHandler None

</Location>

这样你的DJANGO的admin就可以正常工作了。

======================================

一直在寻找产品部署环境和开发环境时,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)的文件夹里的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: