Мы рекомендуем выбирать Jinja2 (http://jinja.pocoo.org/) в качестве библиотеки шаблонов для новых веб-приложений Python. Используется в качестве движка по умолчанию в Flask и генераторе документации для Python Sphinx (http://www.sphinx-doc.org/), может применяться в Django, Pyramid и Tornado. Она работает с основанным на тексте языком шаблонов, поэтому подойдет для генерации любой разметки, а не только HTML.

Позволяет настраивать фильтры, теги, тесты и глобальные переменные. Предоставляет возможность добавлять логику в шаблоны, что сокращает объемы кода.

Рассмотрим важные теги Jinja2:

{# Это комментарий, он выделяется решеткой и фигурными скобками. #}

{# Так можно добавить переменную: #}

{{title}}

{# Так можно определить именованный блок, который можно заменить #}

{# на шаблон-потомок. #}

{% block head %}

This is the default heading.

{% endblock %}

{# Так можно выполнить итерирование: #}

{% for item in list %}

  • {{ item }}
  • {% endfor %}

    Рассмотрим пример сайта в комбинации с веб-сервером Tornado, описанным в подразделе «Tornado» текущего раздела:

    # импортируем Jinja2

    from jinja2 import Environment, FileSystemLoader

    # импортируем Tornado

    import tornado.ioloop

    import tornado.web

    # Загружаем файл шаблона templates/site.html

    TEMPLATE_FILE = "site.html"

    templateLoader = FileSystemLoader(searchpath="templates/")

    templateEnv = Environment(loader=templateLoader)

    template = templateEnv.get_template(TEMPLATE_FILE)

    # Список популярных фильмов

    movie_list = [

    ····[1,"The Hitchhiker's Guide to the Galaxy"],

    ····[2,"Back to the Future"],

    ····[3,"The Matrix"]

    ]

    # Метод template.render() возвращает строку, содержащую отрисованный HTML

    html_output = template.render(list=movie_list, title="My favorite movies")

    # Обработчик для основной страницы

    class MainHandler(tornado.web.RequestHandler):

    ····def get(self):

    ····# Возвращает отрисованную строку шаблона запросу браузера

    ········self.write(html_output)

    # Присваиваем обработчик на сервер (127.0.0.1:PORT/)

    application = tornado.web.Application([

    ····(r"/", MainHandler),

    ])

    PORT=8884

    if __name__ == "__main__":

    ····# Настраиваем сервер

    ····application.listen(PORT)

    ····tornado.ioloop.IOLoop.instance(). start()

    Файл base.html может быть использован в качестве основы для всех страниц сайта. В этом примере они могли бы быть реализованы в блоке content (в данный момент пуст):

    http://www.w3.org/1999/xhtml">

    ····

    ····{{title}} — My Web Page

    ····{# В следующей строке будет добавлено содержимое шаблона site.html #}

    ····{% block content %}{% endblock %}

    ····{% block footer %}

    ····© Copyright 2013 by http://domain.invalid/">you>.

    ····{% endblock %}

    Перейти на страницу:

    Все книги серии Бестселлеры O'Reilly

    Похожие книги