Django-compressor: собрать, объединить и * затем * перейти к фильтрам?

Созданный на 15 апр. 2011  ·  6Комментарии  ·  Источник: django-compressor/django-compressor

Привет! Есть ли способ собрать и объединить CSS или JS в конкретном блоке и _ затем_ пропустить его через цепочку фильтров? В частности, я хотел бы использовать pyScss для обработки моего SCSS. Я создал pySCSSFilter расширяющий FilterBase , и мне очень хотелось бы сделать что-то вроде:

{% compress css %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/mixins.scss" />
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/base.scss" />
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/other.scss" />
{% endcompress %}

но, конечно, не будет работать, так как мои файлы обрабатываются изолированно друг от друга.

Есть способ?

Ваше здоровье!

Самый полезный комментарий

Это очень важно при использовании препроцессоров CSS, таких как меньше, его «основная» функция позволяет использовать миксины. Поэтому объединение файлов перед обработкой с помощью фильтра является обязательной функцией. Есть ли какие - либо планы объединить @jannon запросы сделать Dev филиал django_compressor?

Все 6 Комментарий

Хм, это именно то, чего я бы не хотел.

Что делать, если они не находятся в одном базовом пути и имеют одинаковые операторы @import, но ссылаются на разные файлы, потому что они находятся в разных путях.

Прямо сейчас @import даже не работает, потому что содержимое файла записывается во временный файл перед передачей процессору.

Я говорю обрабатывать файлы один за другим, а затем объединять, чтобы все ссылки для компиляции были правильными.

Я проведу голосование за способ объединения файлов перед предварительной компиляцией. Это было бы очень полезно при использовании less и т. Д., Поскольку резервный вариант - хранить миксины и глобальные переменные в одном файле и объединять его перед компиляцией. Прямо сейчас вам нужно повторить эти переменные и миксины в каждом файле css, т.е. если у вас есть набор глобальных переменных цвета кожи, который используется в нескольких файлах css, что как бы разрушает цель использования глобальных переменных в структурах css, таких как sass или менее , если вы не храните все в одном файле.

Я понимаю проблему, о которой упоминает hvdklauw, поэтому, возможно, это может быть вариант для каждого блока сжатия, чтобы или не объединять до предварительной компиляции или после?

@gensmann Добавление опции к блоку сжатия звучит как план, ага.

Это очень важно при использовании препроцессоров CSS, таких как меньше, его «основная» функция позволяет использовать миксины. Поэтому объединение файлов перед обработкой с помощью фильтра является обязательной функцией. Есть ли какие - либо планы объединить @jannon запросы сделать Dev филиал django_compressor?

Что касается Sass, мой подход к этому состоит в том, чтобы определить все пути включения для двоичного файла sass, а затем @import других файлов в моих файлах scss:

# app/settings/common.py
...
scss_args = " ".join(["--include-path %s/vendor/bourbon/app/assets/stylesheets/" % VENDOR_ROOT,
                      "--include-path %s/vendor/bootstrap-sass-official/vendor/assets/stylesheets/" % VENDOR_ROOT])
...

COMPRESS_PRECOMPILERS = (
    ('text/coffeescript', 'node_modules/.bin/coffee --compile --stdio'),
    ('text/x-scss', 'node_modules/.bin/node-sass %s {infile} {outfile}' % scss_args)
)
...
// app/common/static/css/screen.scss
<strong i="9">@import</strong> url("http://fonts.googleapis.com/css?family=Montserrat:400,700");
<strong i="10">@import</strong> "./vendor.scss";
<strong i="11">@import</strong> "./elements.scss";
<strong i="12">@import</strong> "./pages.scss";

body, html {
    font-family: 'Montserrat';
}
// app/common/static/css/vendor.scss
<strong i="15">@import</strong> "_bourbon.scss";
<strong i="16">@import</strong> "bootstrap.scss";
<! -- app/common/templates/base.html -->
...
{% compress css %}
<link href="{% static 'css/screen.scss' %}" type='text/x-scss' media='screen, projector' rel='stylesheet'>
{% endcompress %}
...

@airtonix Я начал это делать, но изменения в любых файлах @import 'ed не отслеживаются, и поэтому сервер необходимо перезапускать при каждом изменении css в них.
Кинда удивлен, что эта функция еще не реализована. webassets решили эту проблему, позволив пользователям использовать SASS_AS_OUTPUT = True , который, возможно, сначала объединяет файлы.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

albertyw picture albertyw  ·  16Комментарии

badbye picture badbye  ·  10Комментарии

polmuz picture polmuz  ·  20Комментарии

alper picture alper  ·  24Комментарии

dasloss picture dasloss  ·  6Комментарии