Bu örnekteki fabfile.py dosyası ile statik dosyaları (JS ve CSS) küçültebilir ve tek bir dosya halinde sunabilirsiniz. Bu kodları ben bir Django projesi için kullandım. Ancak kodlar genel kullanıma yönelik güncellenebilir ve farklı projeler için de hazır hale getirilebilir.
project_folder
appname
static
fabfile.pyAşağıdaki komut project_folder/appname dizini altında css_version.py ve js_version.py dosyalarını oluşturur (varsa üzerine yazar)
$ fab minifyTemplate dosyanıza bu dosyalardaki VERSION değişkeni değerini gönderip css ve js dosyası için kullanabilirsiniz. Örneğin:
views.py
import css_version
import js_version
def page(request):
template_params = {
'css_version': css_version.VERSION,
'js_version': js_version.VERSION,
'is_template_debug': settings.TEMPLATE_DEBUG
}
return render_to_response('template.html', template_params)template.html
{% if is_template_debug %}
<link href="{% static 'flatui/bootstrap/css/bootstrap.css' %}" rel="stylesheet" />
<link href="{% static 'flatui/css/flat-ui.css' %}" rel="stylesheet" />
<link href="{% static 'alertify/alertify.core.css' %}" rel="stylesheet" />
<link href="{% static 'alertify/alertify.default.css' %}" rel="stylesheet" />
<link href="{% static 'reveal/reveal.css' %}" rel="stylesheet" />
<link href="{% static 'site/style.css' %}" rel="stylesheet" />
{% else %}
<link href="{% static 'all.min.css' %}?v={{ css_version }}" rel="stylesheet" />
{% endif %}fabfile.py
from fabric.api import *
from rjsmin import jsmin
from rcssmin import cssmin
import time
timestamp = int(time.time())
def minify():
minify_css_files()
minify_js_files()
def minify_css_files():
files = [
'appname/static/flatui/bootstrap/css/bootstrap.css',
'appname/static/flatui/css/flat-ui.css',
'appname/static/alertify/alertify.core.css',
'appname/static/alertify/alertify.default.css',
'appname/static/reveal/reveal.css',
'appname/static/site/style.css'
]
minify_files(files, 'appname/static/all.min.css', 'appname/css_version.py')
def minify_js_files():
files = [
'appname/static/flatui/js/jquery-1.8.3.min.js',
'appname/static/flatui/js/jquery-ui-1.10.3.custom.min.js',
'appname/static/flatui/js/jquery.ui.touch-punch.min.js',
'appname/static/flatui/js/bootstrap.min.js',
'appname/static/flatui/js/bootstrap-select.js',
'appname/static/flatui/js/bootstrap-switch.js',
'appname/static/flatui/js/flatui-checkbox.js',
'appname/static/flatui/js/flatui-radio.js',
'appname/static/flatui/js/jquery.tagsinput.js',
'appname/static/flatui/js/jquery.placeholder.js',
'appname/static/alertify/alertify.min.js',
'appname/static/moment/moment.min.js',
'appname/static/reveal/jquery.reveal.js',
'appname/static/site/app.js'
]
minify_files(files, 'appname/static/all.min.js', 'appname/js_version.py', is_css=False)
def minify_files(files, output_file, version_file, is_css=True):
minified = ''
for file in files:
with open(file) as inputFile:
srcText = inputFile.read()
minified += "\n\n/*%s*/\n\n" %(file)
if is_css:
minified += cssmin(srcText)
else:
minified += jsmin(srcText)
output = open(output_file, 'w')
output.write(minified)
output.close()
version_file = open(version_file, 'w')
version_file.write('VERSION = %s' %(timestamp))
version_file.close()