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