Моя борьба с javascript ч.3.

Вроде бы все готово. Для компиляции осталось пару строк функции компрессора, которая является просто враппером для 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).

Add post to: Delicious Reddit Slashdot Digg Technorati Google
(already: 1) Comment post

Comments

No comments for this post

Required. 30 chars of fewer.

Required.