在runserver

时间:2016-05-31 14:04:35

标签: django apache

我使用staticfiles在我的Django应用程序中管理静态文件(JS,CSS,图像等)。这很好用,但我想在用户的浏览器能够启动时dynamically serving pre-compressed sources

我浏览了链接教程,并且在生产中(在Apache上)这很好用。我可以使用

包含文件
<script src="/static/js/my-site"></script>

并且当支持GZip编码时,它将在旧浏览器和my-site.js中加载my-site.js.gz。大!但是:这会使用runserver打破本地开发。当然,staticfiles默认视图不知道如何将/js/my-site转换为/js/my-site.js(或.gz)。要使runserver正常工作,我需要指定扩展,这会破坏内容协商。

是否有更好的方法来配置Apache,以便我可以始终请求.js(或.css等)并透明地获得压缩版本?或者我可以告诉Django如何在不指定扩展名的情况下找到所请求的资源?我不认为我是唯一一个试图这样做的人......

1 个答案:

答案 0 :(得分:1)

没有简单的解决方案。主要是因为你正在使用专为apache web服务器设计的东西(afaik)。

我认为有3个解决方案:

  1. 将源。{js,css}文件保存在单独的目录中,在开发中,您可以从源目录或压缩文件中提供它们 - 简单,透明,您可以隐藏未压缩和未混淆的源远离目标
  2. 使用.min。{js,css}结束压缩文件 - 不需要单独的目录,可以隐藏apache中的源代码(mod_rewrite)
  3. 编写自己的小型中间件,它将模拟apache的作用(选择和重写路径的行数很少,甚至可以根据DEBUG配置变量进行不同的行为)
  4. 使用一些动态解决方案,例如Django Compressor,它将按需编译这些文件
  5. (我正在使用选项4 :))