2010-11-17 92 views
10

我使用Django 1.2.3中的django-compressor应用程序来缩小和合并大量包含的CSS和JS文件。在基本模板,我有Django压缩器和模板继承

{% load compress %} 
{% compress js %} 
{% block js %} 
<script type="text/javascript" src="/site_media/js/jquery.query-2.1.7.js"> 
{% endblock %} 

和一个孩子,

{% block js %} 
{{block.super}} 
<script type="text/javascript" src="/site_media/js/jquery.validate.min.js"> 
{% endblock %} 

当模板呈现,第一个脚本标记正确精缩,但第二个不是。在类似的情况下,我已经确认问题是继承。

我不想继续在子模板中使用压缩标签,因为使用这个应用程序的一半是合并文件和削减HTTP请求。我错过了什么吗?我应该考虑另一种解决方案吗?

回答

14

我使用Django压缩机使用Django 1.2,我把它像这样:

{% compress js %} 
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-1.4.2.min.js"></script> 
{% block extra_compressed_js %}{% endblock %} 
{% endcompress %} 

{% block external_js %}{% endblock %} 

而且我extra_compressed_js块我会经常使用您所描述的方法,用{{ block.super }}通过继承增加更多的js 。它适合我,没有任何麻烦。有一点你必须要小心的是所有的JS压缩需要在本地文件系统上可用。这就是为什么我有一个单独的external_js块,对于来自外部来源的JS。

这听起来像是其他事情正在发生。确保您的压缩机副本是最新的,然后检查您的继承以确保其实际工作正常。一种方法是通过在您的设置中设置COMPRESS=False并确保您想要包含的所有JavaScript实际显示在呈现的模板中。

+0

现在看看这个。 – 2010-11-17 16:22:24

+0

意外地在我的压缩文件中包含外部样式表 - 非常感谢! – 2010-11-17 20:08:25

+0

如果您使用脱机压缩,例如'django-admin.py compress',这种方式仍然可行吗?虽然它适用于请求压缩,但在离线压缩过程中,它似乎无法正确创建从其中继承的页面的文件。 [相关文章](http://stackoverflow.com/questions/9559018/does-django-compressor-work-with-template-inheritance) – MrColes 2013-01-25 19:55:08

-1

我不知道这是否会工作,但它似乎值得一试:

首先在你的基本模板这些块:

{% compress js %} 
{% block js %} 
{% endblock %} 
{% endcompress %} 

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

,然后在一个给定的子模板:

{% block js %} 
{{ block.super }} 
<script type="text/javascript" src="/site_media/js/jquery.query-2.1.7.js"> 
{% endblock %} 

总是使用block.super。就像我说的,我不知道它是否会起作用,但它可能会起作用。