slimish_jinja пакет предоставляет тонкий синтаксис шаблонов для jinja2.
Установка
Я буду загружать его на PyPi в ближайшее время. К тому времени, клонировать репозиторий. Примеры использования его в качестве расширением `jinja2 (jinja_demo.py)`, `с Flask (flask_demo.py)` и standalone` (convert.py и demo.py) `в комплекте.
Если вы хотите использовать его для других целей, то `лексический - lexer.py` и` парсер - parser.py` достаточно просто. `lexer` читает входной линиями и генерирует маркеры. `parser` реализует руки проката метод рекурсивного спуска.
Для быстрой ссылки, эта тонкая ::
& NBSP; & NBSP; & NBSP; ! 5
& NBSP; & NBSP; & NBSP; HTML
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; глава
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Встроенный статический контент.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; заглавие
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; -блок название
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; | Slimish-дзиндзя Пример
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Самозакрывания тег с атрибутами.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; мета имя = "ключевые слова" содержание = "язык шаблонов"
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; сценарий
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Пустой дзиндзя тегов.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; block сценарий
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / "ID" и "класс" ярлык.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Тело # home.fluid.liquid
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Вложенные статического контента.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; h1
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; | Это мой заголовок.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / 'DIV' с 'ID' и '' класса ярлыка.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; # contents.main
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Пустой HTML тегов.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; DIV%
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; р = Динамический контент
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; п
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; | Вложенные dyanmic = содержание
Левый отступ сохраняется в текстовых блоках.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Смешивание HTML прекрасно, как хорошо.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; п
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; | <А HREF \ = "http://www.thoughtnirvana.com"> ThoughtNirvana а>
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Динамический атрибутов.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; класс ул = "= user_class"
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / Дзиндзя тегов.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; -для пользователей пользователи
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Li = user.name
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; -если user.last_name
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Li = user.last_name
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; -elif user.middle_name
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Li = user.middle_name
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; -другой
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Ли Ни один пользователь не найдено.
преобразует в:
& NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; <Название>
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {% Блок%} название
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Slimish-дзиндзя Пример
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {%}% Концевым блоком
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Название>
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; <Скрипт>
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {% Блок сценария%} {%}% концевым блоком
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Скрипт>
& NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Это мой заголовок.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
Динамическая {{содержание}}
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Вложенные dyanmic {{содержание}} & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Левый отступ сохраняется в текстовых блоках.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; <А HREF = "http://www.thoughtnirvana.com"> ThoughtNirvana а>
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; <Ул & NBSP; класс = "{{}} user_class">
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {% Для пользователя в пользователей%}
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {%, Если user.last_name%}
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {% Элиф user.middle_name%}
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {%} ENDIF%
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {% другой %}
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; {%}% ENDFOR
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP;
& NBSP; & NBSP; & NBSP;