Как стать автором
Обновить

Комментарии 6

Я по синтаксису подумал, что разбирают исходники Jinja.
Но ведь Ваш парсер сломается на {{ "}}" }}.
Jinja и Django тоже «сломаются»
Джанга ломается, jinja нет.

>>> from django.template import Template, Context
>>>Template("{{ l|join:'}}' }}").render(Context({'l': [1, 2, 3]}))
TemplateSyntaxError: join requires 1 arguments, 0 provided

>>> from jinja2 import Template
>>> Template("{{ '}}' }}").render()
u'}}'
Не спорю, что в каких-то «исключительных» ситуациях регулярное выражение может некорректно отрабатывать и нам нужно будет усложнять регулярку, чтобы решить возникшую проблему. Для чего, конечно же придется анализировать и то, что заключено в фигурных скобках (т.е. не учитывать их, если они заключены в кавычки, поскольку это приведет не к корректному поведению). Тем более, стоит учесть, что это простейший пример шаблонизатора, в котором реализована лишь самое простое. Добавлять улучшения можно до бесконечности.
В большей степени, мы предполагаем, что программист опишет некую часть внутри HTML-кода корректно и без ошибок (не зря же все-таки решил использовать наш шаблонизатор).
TOK_REGEX = re.compile(r"(%s.*?%s|%s.*?%s)" % (
VAR_TOKEN_START,


при таком способе формирования регулярки, подставляемые значения нужно re.escape()'ить.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории