2013-04-19 1 views
5

Я организовал шаблоны в своем проекте Django таким образом, что каждая страница на сайте содержит «общий» LESS-файл, и каждая страница также может указывать другой LESS-файл, который содержит стили, относящиеся к странице.Как использовать django-компрессор с несколькими файлами LESS, которые импортируют общие файлы?

Проблема в том, что мне нужен файл LESS для конкретной страницы, чтобы иметь возможность ссылаться на переменные в «общем» LESS-файле. Самый простой способ сделать это, я думал, состоял в том, чтобы просто переместить объявления переменных в отдельный файл, который оба файла LESS могли бы @import.

Однако приложения Django используют отдельные каталоги для хранения своих статических файлов. В конце концов, файловая система выглядит следующим образом:

- common 
    - static 
     - css 
     - definitions.less 
     - common.less 
- other 
    - static 
     - css 
     - other.less

Оба common.less и other.less нужно импортировать definitions.less. В случае common.less это так же просто, как:

@import "definitions.less"; 

Вот как МЕНЬШЕ файлы фактически включены на странице, на всякий случай, который помогает:

{% load compress %} 
{% load static %} 

{% compress css %} 
    <link href="{% static "css/common.less" %}" 
      rel="stylesheet" type="text/less"> 
{% endcompress %} 

Что было бы самым простым способом чтобы обеспечить определение общих переменных для обоих файлов LESS? Я хочу, чтобы избежать объединения LESS файлов по нескольким причинам:

  • Она удаляет преимущества сыпучей связи (способность деактивировать приложение без каких-либо побочных эффектов на остальной части сайта).
  • Дополнительные данные, извлекаемые для одной страницы, увеличены, так как все стили для всех приложений должны быть извлечены.
+0

Вы нашли ответ на этот вопрос? Я столкнулся с этой же проблемой –

+0

Любое слово о решении этой проблемы? –

ответ

0

Мы делаем то же самое в нашем приложении - у нас есть общий файл main.less, который включен многими другими менее файлами. Однако мы не сталкиваемся с этой проблемой. Я думаю, что есть несколько способов обойти это: вы можете изменить расположение своих статических файлов.

Существует установка в django STATICFILES_DIRS - и, похоже, вы можете изменить местоположение ваших статических файлов, если хотите, вместо того, чтобы вставлять их в такие приложения. https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-STATICFILES_DIRS

Наш код выглядит следующим образом

{% compress css %} 
{% include "_base_css.html" %} 
{% endcompress %} 

И тогда _base_css.html просто включает в себя все меньше файлов, с нашей main.less приходит первым.

## _base_css.html 
<link rel="stylesheet" type="text/less" href="{{ STATIC_URL }}css/main.less"> 
<link rel="stylesheet" type="text/less" href="{{ STATIC_URL }}css/about.less"> 
<link rel="stylesheet" type="text/less" href="{{ STATIC_URL }}css/dashboard.less"> 

Это мне не ясно из вашего вопроса, что ошибка, но я считаю, ваш общий меньше файл должен быть включен прежде, чем любой другой файл меньше, чтобы быть доступным. В вашем фрагменте кода это не похоже на то, что вы включили это. Что касается сжатия, я не думаю, что сжатие всего вашего CSS-файла sitewide в одном файле слишком плохое - это одно скачивание в первый раз, а затем полностью кэширование.

Надеюсь, это было полезно.