django-compressor是否可以使用模板继承?

时间:2012-03-04 21:34:47

标签: django compression django-compressor

我正在使用django-compressor来压缩我网站的静态CSS和Javascript文件。由于我通过Amazon S3提供我网站的静态资产,我还使用django-storages将我的文件上传到S3。

这是我的问题:我正在尝试创建一个干净的base.html模板,我的网站的所有其他模板都可以继承和扩展。以下是目前的情况:

{% load compress %}

<html>
 <head>
  <!-- test -->
  {% compress css %}
   <link rel="stylesheet" type="text/css" media="screen" href="{{ STATIC_URL }}css/styles.css" />
  {% endcompress %}

  {% compress css %}
  {% block css %}{% endblock %}
  {% endcompress %}

  {% compress js %}
  {% block js %}{% endblock %}
  {% endcompress %}
 </head>
 <body>
  {% block body %}{% endblock %}
 </body>
</html>

正如您所看到的,我尝试在此处执行的操作是允许我继承此模板的模板覆盖cssjs块,因此他们可以定义自己的css和javascript进行压缩。不幸的是,事情并非如此。

当我运行python manage.py compress(让django-compress分析我的模板并生成压缩的javascript和css代码)时,它实际上并没有找到我包含的css和javascript文件。

例如,这是我网站的index.html模板:

{% block css %}
 {{ block.super }}
 <link rel="stylesheet" type="text/css" media="screen" href="{{ STATIC_URL }}css/index.css" />
{% endblock %}

当我尝试访问我网站上的该页面时,我收到一条错误消息,指出压缩文件不存在。

我相信发生的事情是python manage.py compress命令没有检查从base.html继承的模板。由于它没有分析它们,因此它不会生成任何压缩代码。

我真的很想让它工作,因为到目前为止我找到的唯一解决方法是在我明确指定的每个模板文件中手动添加{% compress %}...{% endcompress %}标记。我只是讨厌这样做,因为它在所有地方都重复了这么多代码:(

非常感谢任何建议。

1 个答案:

答案 0 :(得分:5)

我认为您正在使用脱机压缩,在这种情况下,模板继承不能像预期的那样工作。请参阅与此“问题”相关的这些问题: