Django压缩器和模板继承

11

我正在使用django-compressor应用程序在Django 1.2.3中压缩和合并若干包含的CSS和JS文件。在基础模板中,我有以下内容:

{% 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 %}

模板渲染时,第一个 script 标签被正确压缩了,但第二个没有。在类似的情况下,我确认问题是继承造成的。

我不想在子模板中继续使用压缩标签,因为使用此应用程序的一半目的是合并文件并减少 HTTP 请求。我是否遗漏了什么?是否应该寻找另一种解决方案?

2个回答

15

我在Django 1.2中使用django-compressor,并按照以下方式进行设置:

{% 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 块中,我经常使用你描述的方法,通过继承来添加更多的JS,这对我很有效。只有一件事需要小心,就是所有要压缩的JS文件都必须在本地文件系统上可用。这就是为什么我有一个单独的 external_js 块,用于存放来自外部来源的JS。

听起来好像还有其他问题。确保你的 compressor 版本是最新的,然后检查你的继承是否正确运行。可以通过在设置中设置 COMPRESS=False 来进行验证,确保你想要包含的所有javascript实际上都出现在渲染的模板中。


不小心在我的压缩文件中包含了一个外部样式表-非常感谢! - Matt Luongo
如果您使用离线压缩,例如 django-admin.py compress,这个功能是否仍然有效?虽然它可以在请求中进行压缩,但在离线压缩期间,似乎无法正确地为继承自此页面的页面创建文件。相关帖子 - MrColes

-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。就像我说的,我不知道它是否有效,但可能会有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接