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

При рендеринге шаблонов первый тег скрипта минифицируется корректно, а второй — нет. В подобных сценариях я подтвердил, что проблема связана с наследованием.

Я не хочу продолжать использовать теги сжатия в дочерних шаблонах, потому что половина смысла использования этого приложения заключается в объединении файлов и сокращении HTTP-запросов. Я что-то упускаю? Есть ли другое решение, на которое я должен обратить внимание?


person Matt Luongo    schedule 17.11.2010    source источник


Ответы (2)


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

person Brandon Konkle    schedule 17.11.2010
comment
Случайно включил внешнюю таблицу стилей в свой компресс - большое спасибо! - person Matt Luongo; 17.11.2010
comment
это все еще работает, если вы используете автономное сжатие, например, django-admin.py compress? Хотя он работает для сжатия в запросе, во время автономного сжатия он, похоже, неправильно создает файлы для страниц, которые наследуются от этого. связанный пост - person MrColes; 25.01.2013

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

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

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

person aptwebapps    schedule 17.11.2010