Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2339591
  • 博文数量: 168
  • 博客积分: 3184
  • 博客等级: 中校
  • 技术积分: 3959
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-12 18:57
文章存档

2019年(1)

2018年(2)

2017年(3)

2016年(15)

2015年(10)

2014年(60)

2011年(1)

2010年(76)

分类: Web开发

2014-07-12 12:05:40

Django 1.3以后,采用static方式处理静态文件,比如网站的css js images等等,而以前所谓的media改成处理网站自身以外的媒体文件了。media和static用途上容易混淆,请移步上次讲的《对Django media和static概念的理解》。


如果简单使用static,配置起来会比media要少一步,下面会比较一下。说到static,不能不说说Django开发环境和部署环境的区别,Django配置文件settings.py里的DEBUG变量就是主要的区别, DEBUG=True,说明是在开发环境(调试模式)下,DEBUG=False反之是在正式部署环境下使用。两者有很大的区别,比如缓存,出错信息的方式等等,还有今天说的静态文件的处理方式上。开发环境下静态文件都是通过Django自带的web服务器来处理的(这样会更方面)。如果把DEBUG设置成False,那么Django自带的web服务器自然不处理静态文件了,静态文件都交给nginx,apache来处理吧(这样会更高效)。

具体说说static在开发环境下怎么配置吧。

这次主要拿Django 1.4版本来做配置,这个要事先声明,因为1.4以后,Django的项目结构发生很大的变化,如果下面的配置做法放到Django 1.3上肯定不适应了,值得注意哦。staitc的配置只要在settings.py里做即可。

DEBUG=True
这个设定环境是处在开发环境下。

然后自己建立一个变量SITE_ROOT,变量不是必须的,只是为了方面重用,名字可以随意起。
import os
SITE_ROOT=os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')
变量值项目的根目录,也就是settings.py的存放位置。

然后给静态文件变量赋值,告诉Django,静态文件在哪里
STATIC_ROOT = os.path.join(SITE_ROOT,'static')

说到这里,我还是说说项目文件结构吧,这个容易蒙人,比如这次的讲的项目结构如下:
myproject
----myproject
--------__init__.py
--------settings.py
--------urls.py
--------wsgi.py
----blog
--------__init__.py
--------models.py
--------views.py
--------test.py
----static
--------css
------------style.css
--------js
------------jquery.js
--------images
------------me.jpg
----media
--------upload


注意项目的结构,你会发现SITE_ROOT就是
myproject
----myproject
的路径。

STATIC_ROOT就是
myproject
----media
的路径。

好,接着配置说
STATIC_URL = '/static/'
给静态文件url一个后缀,在templates里用到的。

最后关键的部分是STATICFILES_DIRS以下配置
STATICFILES_DIRS = (
    ("css", os.path.join(STATIC_ROOT,'css')),
    ("js", os.path.join(STATIC_ROOT,'js')),
    ("images", os.path.join(STATIC_ROOT,'images')),
)
简要说一下,static文件夹在项目里,有css js images 三个文件夹(看项目结构),他们的路径分别是:
os.path.join(STATIC_ROOT,'css'),os.path.join(STATIC_ROOT,'js'),os.path.join(STATIC_ROOT,'images');
我们分别给他们起三个别名css,js,images(你可以随意给,不过为了易记,我们原名称指定别名了)

到这里staitc算是配置完成了,并不需要再urls.py里配置相关的东西,Django就会自动找到对的路径解析静态文件了,也是在配置上static比media少了一步。

配置好了,在templates 就能正常使用静态文件了。怎么用?拿一个templates讲解吧。





staitc例子




    img



注意{{STATIC_URL}}就是取配置文件settings.py里的STATIC_URL变量,解析出来的就是:/static/。
而{{STATIC_URL}}css/style.css最终解析出来的就是我们想要的:/static/css/style.css,Django会根据配置文件找到相应的文件。


快到尾声的时候,讲讲正式部署环境怎么设置吧:
DEBUG=False
首先把DEBUG设置为False,告诉Django环境是正式的非调试模式下了,然后Django就不再通过自己来处理静态页面了,最后静态文件都交给Nginx Apache来处理了。

说说Nginx怎么配置,才能正确解析静态文件吧,在一个server里添加一个location静态文件处理

location  /static/ {
        root  /home/www-data/twogoo/myproject/;

    }

这个也有一个容易犯错的地方,就是路径,有的同学常常指定这样的路径:/home/www-data/twogoo/myproject/staitc/;这样Nginx应该找不到静态文件的,因为Nginx会跑到/home/www-data/twogoo/myproject/staitc/staitc/路径里找,注意这点,静态文件处理上你会顺很多。
阅读(12446) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~