2012-03-04 69 views
7

我使用的是django-compressor来压缩我站点的静态CSS和Javascript文件。由于我通过Amazon S3服务于我的网站的静态资产,因此我还使用django-storages将我的文件上传到S3。django-compressor是否可以使用模板继承?

这是我的问题:我试图做一个干净的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-compressor分析我的模板并生成压缩的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 %}标签在我明确每个单一的模板文件。我只是不愿意这样做,因为它重复无处不在这么多的代码:(

任何意见,将不胜感激。

+0

声音对我来说喜欢这个问题是因为错误指定:文件是否存在于本地文件系统上?记住S3,你必须设置存储来保存本地以及远程。 – 2012-03-04 22:19:53

+0

我目前正在通过自定义的CachedS3BotoStorage类来处理django-compressor文档。这部分工作正常(例如:如果我不试图压缩{%block%} .. {%endblock%}片段)。另外:当我实际运行'python manage.py compress'管理命令时,我没有收到任何错误 - 只有当我实际尝试查看从'base.html'继承的页面并覆盖css或js块时才会出现错误。 – rdegges 2012-03-04 23:03:51

回答