Sass is great as it adds some neat functionality to your stylesheets, e.g. nesting, mixins, variables and math. Since it is a command line tool you can execute it like
sass --watch input.scss:output.css
Having to type this command is tedious and creating a .sh or .bat script for this requires you to maintain two files. My approach is to create a custom django-admin command watchsass for this. How this is generally done can be read on this page. The following listing shows the command which I’m using in a small project right now.
#/usr/bin/env python2.6 # Copyright 2011 Ben Ripkens # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. __authors__ = [ '"Ben Ripkens" <firstname.lastname@example.org>', ] from django.core.management.base import NoArgsCommand import os import time import datetime class Command(NoArgsCommand): """ Watch for changes in the common.scss file and convert it to common.css using sass. Sass needs to be on the path. http://sass-lang.com/ """ help = 'Convert scss to css' def handle_noargs(self, **options): scss = os.path.abspath("media/css/common.scss") css = os.path.abspath("media/css/common.css") command = "sass \"" + scss + "\":\"" + css + "\" --style compressed" print "Executing command '%s'" % command print "Sass watch parameter is not used due to some bug." last_update = os.stat(scss).st_mtime os.system(command) while True: if not last_update == os.stat(scss).st_mtime: os.system(command) last_update = os.stat(scss).st_mtime print "Updated stylesheet at %s" % datetime.datetime.now() time.sleep(0.5)
As you can see I’m not using the –watch flag. This is because it’s not working on my system.