Django Compressor 压缩静态文件 JS 和 CSS

发布于 2021-03-22 12:58:55 字数 3684 浏览 1461 评论 0

网站开发阶段静态资源文件一般都是未经过压缩合并处理的,这对于访问量巨大的网站来说不仅浪费带宽,而且也会影响网站的访问速度。django-compressor 的作用就是在项目部署的时候对静态文件压缩合并成一个文件。

下面先对 settings 配置文件的相关参数简要介绍再讨论 Compressor 的如何使用。如果你对 setting 文件非常了解不妨直接从第二部分开始阅读。

setting 文件配置

早期的 django 处理静态资源要比较啰嗦,还要配置 urlpatterns,不过自从 django1.6 开始加入了 django.contrib.staticfiles 这个内置 app 后,开发环境下处理静态资源就方便很多。

1、django.contrib.staticfiles是django的内置(build-in)app,用于处理js,css,images等静态资源。首先确保这个app已经包含在INSTALLED_APPS中,django1.6默认是包含在其中的。

2、指定STATIC_URL,比如:

 STATIC_URL = '/static/'

STATIC_URL是客户端访问静态资源的根路径,比如:模版中定义的资源路径是:

 { % load staticfiles % }
 <script src="{ % static "js/blog.js" % }"></script>

渲染后的效果是:

 <script src="/static/js/blog.js"></script>

3、默认 django 会从 app 下的 static 子目录下查找静态文件,因此通常情况下你都是将相关静态文件放在各自的app/static目录下。为什么是这样的呢?django 有个默认的配置项 STATICFILES_FINDERS,默认值是:

 ("django.contrib.staticfiles.finders.FileSystemFinder",
 "django.contrib.staticfiles.finders.AppDirectoriesFinder")

从上面我们看到有个叫AppDirectoriesFinder的模块,就是负责在 app/static 目录下找静态文件的。至于FileSystemFinder我们稍后介绍。

4、像 jQuery,bootstrap 等这样公用的资源文件都是在多个不同的 app 中共用的,如果是放在某个app中显得不符python哲学,因此django希望提供了公有的目录来放这些文件,需要用的一个配置参数是:STATICFILES_DIRS,比如:

STATICFILES_DIRS = (
 os.path.join(BASE_DIR, "static"),
 '/var/www/static/',
)

也就是静态文件可以放在磁盘的任何一个位置都可以(只要有权限访问)现在应该明白 FileSystemFinder 的作用了吧。就是用来查找定义在STATICFILES_DIRS中的静态文件的。

部署

以上是我们在开发环境下对静态资源的处理过程,那么在生产环境下是怎么处理的呢?如果还是这样由django自己来处理,那么累死 django 了,对于静态资源直接由Nginx这样的代理去处理好了。django.contrib.staticfiles 提供非常方便的管理命令用来收集不同目录下的静态资源到一个统一的目录中去。

1、设置 STATIC_ROOT,这个目录就是存放所有静态资源的地方.

 STATIC_ROOT="/var/www/foofish.net/static/"

2、运行 collectstatic 管理命令

 python manage.py collectstatic

这个命令会拷贝所有静态资源到 STATIC_ROOT 目录。

3、配置一下 nginx,让访问 /static/ 路径的请求直接访问 STATIC_ROOT 就可以了。

  location /static {
     alias /var/www/foofish.net/static/; # your Django project's static files -       amend as required
 }

第二部分:compressor

django compressor 的安装配置非常简单,主要步骤:

安装:

pip install django_compressor

配置:

COMPRESS_ENABLED = True

INSTALLED_APPS = (
    # other apps
    "compressor",
)

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django.contrib.staticfiles.finders.FileSystemFinder',
'compressor.finders.CompressorFinder',)

默认Compress开启与否取决对于DEBUG,默认是COMPRESS_ENABLED与DEBUG的值相反。因为compress的功能本身是用在生产环境下项目发布前对静态文件压缩处理的。因此想在开发阶段(DEBUG=True)的时候做测试使用,需要手动设置COMPRESS_ENABLED=True

使用:

{ % load compress % }
#处理css
{ % compress css % }
<link href="{ % static "css/bootstrap.min.css" % }" rel="stylesheet">
<link href="{ % static "css/blog-home.css" % }" rel="stylesheet">
<link href="{ % static "css/github.css" % }" rel="stylesheet">
{ % endcompress % }

#处理js
{ % compress js % }
<script src="{ % static "js/jquery-1.10.2.js" % }"></script>
<script src="{ % static "js/bootstrap.js" % }"></script>
<script src="{ % static "js/blog.js" % }"></script>
{ % endcompress % }

执行命令:python manage.py compress ,最终文件将合并成:

<link rel="stylesheet" href="/static/CACHE/css/f18b10165eed.css" type="text/css">
<script type="text/javascript" src="/static/CACHE/js/9d1f64ba50fc.js"></script>

这两文件在 STATIC_ROOT 目录下面。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文