Django-компрессор и наследование шаблонов

Я использую приложение 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-запросов. Я что-то упускаю? Есть ли другое решение, на которое я должен обратить внимание?

Ответ 1

Я использую django-compressor с 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 действительно отображается в визуализированном шаблоне.

Ответ 2

Я не знаю, будет ли это работать, но, похоже, стоит попробовать:

Сначала создайте эти блоки в базовом шаблоне:

{% 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. Как я уже сказал, я не знаю, будет ли это работать, но это может быть.