Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jinja2 в Django

Jinja2 в Django

Владимир Филонов

В двух словах и нескольких цифрах о шаблонизаторе Jinja2 и его применении в Django

Moscow Python Meetup
PRO

October 31, 2013
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Jinja2 в Django
    В двух словах

    View Slide

  2. Django-шаблоны медленные. Печально, но факт.

    View Slide

  3. Зато Jinja2 быстрые

    View Slide

  4. И синтаксис почти такой же

    View Slide

  5. Скобки при вызове методов. Это
    позволяет вызывать их с аргументами

    View Slide

  6. class Person(models.Model):

    def get_friends(count):

    View Slide

  7. # Django
    {{ person.get_friends }}
    Увы, это вызовет исключение и инструкция не
    выполнится. И нам понадобится, например, делать
    templatetag
    # Jinja
    {{ person.get_friends(10) }}

    View Slide

  8. И фильтры, кстати, тоже со скобками
    {{ my_var|some_filter("arg1", "arg2") }}

    View Slide

  9. {{ }} не только для переменных, но и для
    глобальных функций*
    В Jinja простые templatetags это просто функции зарегистрированные
    в окружении. Сложные теги реализовываются в виде плагинов.

    View Slide

  10. django.template.Library.simple_tag(some_function)
    vs
    jinja2.Environment.globals[key] = function_or_var

    View Slide

  11. Чтобы перейти, надо решить
    несколько основных проблем

    View Slide

  12. Нет большинства привычных фильтров и
    тегов

    View Slide

  13. Но не беда - большинство можно просто
    добавить в окружение Jinja и они будут
    работать

    View Slide

  14. from django.template.defaultfilters import escapejs
    jinja2.Environment.globals[“escapejs”] = escapejs

    View Slide

  15. Или взять что-то из готовых решений
    https://github.com/niwibe/django-jinja/
    https://bitbucket.org/trevor/chouwa
    http://google.com =)

    View Slide

  16. + Значительный прирост скорости
    + ИМХО - более человеческий синтаксис
    - Не из коробки
    - Большинство contrib и внешних django-приложений
    может потребовать бубна

    View Slide

  17. Производительность

    View Slide

  18. Jinja2 примерно в 10-20 раз быстрее чем
    Django*

    View Slide

  19. http://mindref.blogspot.ru/2012/10/python-templates-benchmark.html

    View Slide

  20. Спасибо!
    email: [email protected]
    fb: https://www.facebook.com/pyhoster

    View Slide