问题 Django压缩器和模板继承


我正在使用 Django的压缩机 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 %}

模板渲染时,第一个脚本标记正确缩小,但第二个不是。在类似的场景中,我已经确认问题是继承。

我不想在子模板中继续使用压缩标签,因为使用此应用程序的一半要点是合并文件并减少HTTP请求。我错过了什么吗?还有其他解决方案我应该研究一下吗?


8609
2017-11-17 15:43


起源



答案:


我在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 块我会经常使用你描述的方法 {{ block.super }} 通过继承添加更多js。它对我有用而没有任何麻烦。您必须要注意的一件事是,所有要压缩的JS都需要在本地文件系统上可用。这就是为什么我有一个单独的 external_js 阻止,来自外部源的JS。

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


14
2017-11-17 16:05



现在调查一下。 - Matt Luongo
在我的压缩中偶然包含一个外部样式表 - 非常感谢! - Matt Luongo
如果您使用离线压缩,这仍然有效,例如, django-admin.py compress?虽然它适用于请求内压缩,但在脱机压缩期间,它似乎无法正确地为从此页继承的页面创建文件。 相关帖子 - MrColes
你救了我! - YardenST


答案:


我在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 块我会经常使用你描述的方法 {{ block.super }} 通过继承添加更多js。它对我有用而没有任何麻烦。您必须要注意的一件事是,所有要压缩的JS都需要在本地文件系统上可用。这就是为什么我有一个单独的 external_js 阻止,来自外部源的JS。

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


14
2017-11-17 16:05



现在调查一下。 - Matt Luongo
在我的压缩中偶然包含一个外部样式表 - 非常感谢! - Matt Luongo
如果您使用离线压缩,这仍然有效,例如, django-admin.py compress?虽然它适用于请求内压缩,但在脱机压缩期间,它似乎无法正确地为从此页继承的页面创建文件。 相关帖子 - MrColes
你救了我! - YardenST


我不知道这是否有效,但似乎值得一试:

首先在基本模板中包含以下块:

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


-1
2017-11-17 16:01