At the moment django-minify requires Python >2.5 and Django >1.0 to run.
Simply run:
python setup.py install
You can also obtain django-minify via:
pip install django-minify
or
easy_install django-minify
If you want to use templatetags and run the tests you need to add django-minify to your INSTALLED_APPS setting:
INSTALLED_APPS = (
...
'minify',
...
)
To use template tags you also need to copy minify directory in
minify/templates/ to one of your template directories or add
minify/templates/ to your TEMPLATE_DIRS setting.
This doesn't let you use django-minify yet. Additionally you need
to add the setting MINIFY_PATHS to your project settings.
This must be a tuple or list providing directories django-minify
should look for files to minify and combine them. If you for example stored
your JavaScript- and CSS-files in your MEDIA_ROOT you could do
something like this:
MINIFY_PATHS = (
os.path.join(MEDIA_ROOT, 'js'),
os.path.join(MEDIA_ROOT, 'css')
)
You not necessarily need to use directories in your MEDIA_ROOT:
MINIFY_PATHS = (
os.path.join(os.path.dirname(__file__), 'javascript'), # 'javascript' directory in project folder
os.path.join(os.path.dirname(__file__), 'css'), # 'css' directory in project folder
)
Now the last thing to do is pointing to django-minify in your main url conf. In project_dir/urls.py you can add:
urlpatterns = patterns('',
...
(r'^minify/', include('minify.urls')),
...
)
If you want specific files to be minified you can create
<script> or <link> tags pointing to the django-minify views.
Example assuming above url configuration is used:
<link type="text/css" href="/minify/css/?files=reset.css,main.css" /> <script type="text/javascript" src="/minify/js/?files=jquery/jquery-1.4.3.js,base.js"></script>
Though more comfortable to use are the django-minify template tags. In your template do something like this:
{% load minify_tags %}
{% css "reset.css, main.css" %}
{% js "jquery/jquery-1.4.3.js, base.js" %}
This will automatically render the <script> and <link> tags.
Also if you set DEBUG to True it will not combine and minify
the content of these files.
Sometimes you a have lot more than just a couple Javascript- or CSS-files you want to use with django-minify. Instead of specify them in your template you can create a setting for it. The name of the setting doesn't matter. For example:
MY_JAVASCRIPT_FILES = [
'jquery/jquery-1.4.3.js',
'jquery/jquery.tools.js',
'base.js',
'swfobject.js',
...
]
Then in your template you can simply use the name of the setting instead of a comma-seperated string with all these file paths in it:
{% js "MY_JAVASCRIPT_FILES" %}
If you don't want to combine and minify all files together, but for example group them you can use nested lists (or tuples for that matter) in your setting:
MY_JAVASCRIPT_FILES = [
[
'jquery/jquery-1.4.3.js',
'jquery/jquery.tools.js'
],
[
'base.js',
'swfobject.js'
]
]
This will combine and minify the files specified in the
first list/tuple and create a <script> tag for it, then
the files in the second group and so on. See the sample
project for a more complex example using headJS.
One of your views is rendering JavaScript and you want to minify this one as well? No problem. You can pass a url as an optional parameter to your js template tag and therefore to the view:
{% load minify_tags %}
{% js "jquery/jquery-1.4.3.js, base.js" "/url-path/to-my/js-view/" %}
The rendered script tag might then look something like this:
<script src="/minify/js/?files=jquery/jquery-1.4.3.js,base.js&url=/url-path/to-my/js-view/"></script>
This will combine the Javascript prodided by your view with the Javascript within these files. Keep in mind that in the current version of django-minify the view content will be appended first and after that the files will be combined with it.
For django-minify you can provide a couple optional settings to tweak it for your project. Within django-minify app there are reasonable defaults set for it:
For example you could set debug mode just for django-minify
# default: settings.DEBUG MINIFY_DEBUG = True #or False
Specify when browser cached CSS or Javascript will expire:
# default: 5 (days) MINIFY_CSS_JS_EXPIRES = 3 # in days
Specify if HTTP-Response should set the Cache-Control header
to private or public
# default: False (cached in users browser and proxy cache) MINIFY_HEADER_CACHE_PRIVATE = True
Specify how long will minified content stay in Django's cache (if you use Django's cache framework):
# default: 60*60*24*5 aka 5 days MINIFY_CACHE_DURATION = 300 # in seconds