Вроде бы все готово. Для компиляции осталось пару строк функции компрессора, которая является просто враппером для pycow.
pycow_compressor/__init__.py
from django.conf import settings
from pycow.pycow import translate_string
def pycow(*args, **kwargs):
try:
return translate_string(args[0], warnings = False)
except:
if settings.DEBUG:
raise
else:
return ""
Итого, для прозрачной компиляции python->javascript из шаблонов нужно:
- Использовать python2.6
- Установить django-compressor
- Задать в
settings.pyтакую настройку(там еще добавлена настройка для clevercss) - Скачать и установить в проект собственно компилятор pycow
- Скачать и установить в проект файл pycow_compressor/__init__.py, содержащий указанный выше код (и небольшие дополнения, описанные ниже;) ).
После этого, в базовом шаблоне пишется следующее:
{% compressed “py” “pycow_file”%}
В остальных, унаследованных/включенных шаблонах подключaются .py файлы:
{% compress “py” “media/pycow/somepage_script.py”%}
Которые (алллилууйя-братья-и-сестры-не-забудьте-пожертвовать-нашей-церкви-в-кассе-на-выходе!) будут спакованы и скомпилены в один .js файл и выданы в страничку как тег <script> в том месте, где находится {% compressed "py" "pycow_file"%}
Небольшие дополнения
Если сравнить код указанный в начале поста, и код находящийся по ссылке, можно увидеть что они отличаются. Отличие обусловено тем, что без импорта жить плохо, а в pycow этот вопрос не решен вообще.
Хотелось бы, но модифицированный pycow компрессор тоже ничего ниоткуда не импортирует. Он расширяет класс компилятора таким образом, чтобы идентификаторы, которые были указаны командой import, считались классами и инициализировались с конструкцией new. Таким образом, становится возможным корректно использовать ранее загруженные в браузер классы (например классы эффектов mootools).