Работает ли django-compressor с наследованием шаблонов?

Я использую django-compressor для сжатия статических файлов CSS и Javascript моего сайта. Поскольку я обслуживаю статические ресурсы своего сайта через Amazon S3, я также использую django-storages для загрузить мои файлы на S3.

Вот моя проблема: я пытаюсь создать чистый шаблон base.html, который все другие шаблоны моего сайта могут наследовать и расширять. Вот как это выглядит в настоящее время:

{% load compress %}

<html>
 <head>
  <!-- test -->
  {% compress css %}
   <link rel="stylesheet" type="text/css" media="screen" href="{{ STATIC_URL }}css/styles.css" />
  {% endcompress %}

  {% compress css %}
  {% block css %}{% endblock %}
  {% endcompress %}

  {% compress js %}
  {% block js %}{% endblock %}
  {% endcompress %}
 </head>
 <body>
  {% block body %}{% endblock %}
 </body>
</html>

Как видите, здесь я пытаюсь разрешить моим шаблонам, наследующим этот шаблон, переопределять блоки css и js, чтобы они могли определять свои собственные css и javascript для сжатия. К сожалению, этого не происходит.

Когда я запускаю python manage.py compress (чтобы django-compressor анализировал мои шаблоны и генерировал сжатый код javascript и css), он фактически не находил включенные файлы css и javascript.

Например, вот шаблон моего сайта index.html:

{% block css %}
 {{ block.super }}
 <link rel="stylesheet" type="text/css" media="screen" href="{{ STATIC_URL }}css/index.css" />
{% endblock %}

Когда я пытаюсь посетить эту страницу на своем сайте, я получаю сообщение об ошибке, говорящее о том, что сжатый файл не существует.

Я считаю, что происходит то, что команда python manage.py compress не проверяет мои шаблоны, унаследованные от base.html. И поскольку он их не анализирует, он не генерирует никакого сжатого кода.

Я бы очень хотел, чтобы это работало, потому что единственный обходной путь, который я нашел до сих пор, — это вручную добавить теги {% compress %}...{% endcompress %} в каждый отдельный файл шаблона, который у меня есть явно. Я просто ненавижу это делать, так как везде повторяется столько кода :(

Мы будем очень признательны за любые советы.


person rdegges    schedule 04.03.2012    source источник
comment
Мне кажется, проблема в том, что ошибка указывает: существует ли файл в локальной файловой системе? Помните, что с S3 вам нужно настроить хранилище для локального и удаленного сохранения.   -  person Yuji 'Tomita' Tomita    schedule 05.03.2012
comment
В настоящее время я делаю это, как предлагают документы django-compressor, через пользовательский класс CachedS3BotoStorage. Эта часть работает нормально (например, если я не пытаюсь сжать фрагмент {% block %}..{% endblock %}). Кроме того: я не получаю ошибок, когда фактически запускаю команду управления python manage.py compress — только когда я фактически пытаюсь просмотреть страницу, которая наследуется от base.html и переопределяет блоки css или js.   -  person rdegges    schedule 05.03.2012


Ответы (1)


Я предполагаю, что вы используете автономное сжатие, и в этом случае наследование шаблона не работает так, как можно было бы ожидать. См. эти вопросы, относящиеся к этой «проблеме»:

person Daniel Grezo    schedule 09.03.2012