Skip to main content

A django-compressor filter to compile SASS files using libsass

Project description

A django-compressor filter to compile Sass files using libsass.

Installation

Starting from a Django project with django-compressor set up:

pip install django-libsass

and add django_libsass.SassCompiler to your COMPRESS_PRECOMPILERS setting:

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', 'django_libsass.SassCompiler'),
)

You can now use the content type text/x-scss on your stylesheets, and have them compiled seamlessly into CSS:

{% compress css %}
    <link rel="stylesheet" type="text/x-scss" href="{% static "myapp/css/main.scss" %}" />
{% endcompress %}

Imports

Relative paths in @import lines are followed as you would expect:

@import "../variables.scss";

Additionally, Django’s STATICFILES_FINDERS setting is consulted, and all possible locations for static files on the local filesystem are included on the search path. This makes it possible to import files across different apps:

@import "myotherapp/css/widget.scss"

Settings

The following settings can be used to control django-libsass’s behaviour:

  • LIBSASS_SOURCE_COMMENTS - whether to enable SASS source comments (adds comments about source lines). Defaults to True when Django’s DEBUG is True, False otherwise.

  • LIBSASS_OUTPUT_STYLE - SASS output style. Options are 'nested', 'expanded', 'compact' and 'compressed', although as of libsass 3.0.2 only 'nested' and 'compressed' are implemented. Default is ‘nested’. See SASS documentation for output styles. Note that django-compressor’s settings may also affect the formatting of the resulting CSS.

  • LIBSASS_CUSTOM_FUNCTIONS - A mapping of custom functions to be made available within the SASS compiler. By default, a static function is provided, analogous to Django’s static template tag.

  • LIBSASS_SOURCEMAPS - Enable embedding sourcemaps into file output.

  • LIBSASS_PRECISION - Number of digits of numerical precision (default: 5)

  • LIBSASS_ADDITIONAL_INCLUDE_PATHS - a list of base paths to be recognised in @import lines, in addition to Django’s recognised static file locations

Custom functions

The SASS compiler can be extended with custom Python functions defined in the LIBSASS_CUSTOM_FUNCTIONS setting. By default, a static function is provided, for generating static paths to resources such as images and fonts:

.foo {
    background: url(static("myapp/image/bar.png"));
}

If your STATIC_URL is ‘/static/’, this will be rendered as:

.foo {
    background: url("/static/myapp/image/bar.png"));
}

Why django-libsass?

We wanted to use Sass in a Django project without introducing any external (non pip-installable) dependencies. (Actually, we wanted to use Less, but the same arguments apply…) There are a few pure Python implementations of Sass and Less, but we found that they invariably didn’t match the behaviour of the reference compilers, either in their handling of @imports or lesser-used CSS features such as media queries.

libsass is a mature C/C++ port of the Sass engine, co-developed by the original creator of Sass, and we can reasonably rely on it to stay in sync with the reference Sass compiler - and, being C/C++, it’s fast. Thanks to Hong Minhee’s libsass-python project, it has Python bindings and installs straight from pip.

django-libsass builds on libsass-python to make @import paths aware of Django’s staticfiles mechanism, and provides a filter module for django-compressor which uses the libsass-python API directly, avoiding the overheads of calling an external executable to do the compilation.

Author

Matt Westcott matthew.westcott@torchbox.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-libsass-0.8.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

django_libsass-0.8-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file django-libsass-0.8.tar.gz.

File metadata

  • Download URL: django-libsass-0.8.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.2

File hashes

Hashes for django-libsass-0.8.tar.gz
Algorithm Hash digest
SHA256 38fab4ce1245542f3afd7248dc48f8a0b261f5f6c61e7cc43969a9c9079b5ffd
MD5 850acc88aa7c8e20fac75373d30a5673
BLAKE2b-256 ca422792183c2bb27ab6099c847cd9c3e5cbf525770fb2ad2fb13eb893de59f9

See more details on using hashes here.

File details

Details for the file django_libsass-0.8-py3-none-any.whl.

File metadata

  • Download URL: django_libsass-0.8-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.2

File hashes

Hashes for django_libsass-0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 3e74fd8e75ac0e6ebc0443efc3e530167981bf279fecc2294094c820ae266fbb
MD5 8be29cc7d9f72fb2e42c0a736cfa3683
BLAKE2b-256 e4e56334008b5fb90ec70c8a1a1faeee8acf8c2bb94e349a658cb46c7b6f0d2e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page