Изменения
Версия 3.0.1
Не выпущена
- Обновить зависимость MarkupSafe до >= 2.0.
Версия 3.0.0
Выпущена 2021-05-11
- Отказ от поддержки Python 2.7 и 3.5.
- Обновить зависимость MarkupSafe до >=1.1.
- Обновить необязательную зависимость Babel до >=2.1.
- Удалить код, помеченный как устаревший.
- Добавить подсказки типов. #1412
- Использовать API PEP 451 для загрузки шаблонов с помощью
PackageLoader. #1168 - Исправить ошибку, которая мешала импортированным макросам получить доступ к глобальным переменным текущего шаблона. #688
- Добавить возможность игнорировать
trim_blocksс помощью+%}. #1036 - Исправить ошибку, которая приводила к сбою пользовательских фильтров, предназначенных только для асинхронного использования, с постоянным входом. #1279
- Исправить ошибку UndefinedError, которая неправильно выбрасывалась для неопределённой переменной вместо возвращения
UndefinedприNativeEnvironmentв Python 3.10. #1335 - Блоки могут быть помечены как
required. Они должны быть переопределены в какой-то момент, но не обязательно прямым потомком. #1147 - Устареть расширения
autoescapeиwith, они встроенны в компилятор. #1203 - Фильтр
urlizeраспознаётmailto:ссылки и принимаетextra_schemes(илиenv.policies["urlize.extra_schemes"]) для распознавания других схем. Он пытается сбалансировать скобки внутри URL вместо игнорирования хвостовых символов. Парсинг в целом был обновлён для повышения эффективности и соответствия большему количеству случаев. URL без схемы связаны какhttps://вместоhttp://. #522, #827, #1172, #1195 - Фильтры, получающие атрибуты, такие как
mapиgroupby, могут использовать значение false или пустое значение в качестве значения по умолчанию. #1331 - Исправить ошибку, которая препятствовала доступу к переменным, установленным в блоках или циклах, в пользовательских функциях контекста. #768
- Исправить ошибку, которая позволяла вложенным блокам получать доступ к специальным переменным цикла. #1088
- Обновить глобальные переменные шаблона при вызове
Environment.get_template(globals=...), даже если шаблон уже был загружен. #295 - Не выводить ошибку для неопределённых фильтров в невыполненных операторах if и условных выражениях. #842
- Добавить тесты
is filterиis testдля проверки, является ли имя зарегистрированным фильтром или тестом. Это позволяет проверить, доступен ли фильтр в шаблоне, прежде чем использовать его. Функции тестов могут быть помечены декораторами@pass_environment,@pass_eval_context, или@pass_context. #842, #1248 - Поддержка
pgettextиnpgettext(контексты сообщений) в расширении i18n. #441 - Аргумент
widthфильтра|indentможет быть строкой для отступа. #1167 - Парсер понимает шестнадцатеричные, восьмеричные и двоичные целочисленные литералы. #1170
-
Undefined.__contains__(in) вызываетUndefinedErrorвместоTypeError. #1198 -
Undefinedявляется итерируемым в асинхронной среде. #1294 -
NativeEnvironmentподдерживает асинхронный режим. #1362 - Рендеринг шаблонов обрабатывает только
\n,\r\nи\rкак символы перевода строки. Другие символы остаются неизменными. #769, #952, #1313 -
|groupbyфильтр принимает необязательный аргументdefault. #1359 -
Функции и декораторы фильтров были переименованы и объединены. Старые имена устарели. #1381
-
pass_contextзаменяетcontextfunctionиcontextfilter. -
pass_eval_contextзаменяетevalcontextfunctionиevalcontextfilter -
pass_environmentзаменяетenvironmentfunctionиenvironmentfilter.
-
- Асинхронная поддержка больше не требует от Jinja патчить себя. Она всё ещё должна быть включена с помощью
Environment(enable_async=True). #1390 - Переопределение
Context.resolveустарело, переопределитеresolve_or_missingвместо этого. #1380
Версия 2.11.3
Выпущена 2021-01-31
- Улучшить скорость фильтра
urlizeза счёт уменьшения обратной трассировки в регулярных выражениях. Сопоставление электронной почты требует символа слова в начале части домена и только символов слова в TLD. #1343
Версия 2.11.2
Выпущена 2020-04-13
- Исправить ошибку, которая приводила к тому, что вызываемые объекты с
__getattr__, такие какMockобрабатывались какcontextfunction(). #1145 - Обновить фильтр
wordcountдля запуска методовUndefinedпутём обертывания ввода вsoft_str(). #1160 - Исправить зависание при отображении отладки трассировки на 32-битных системах Python. #1162
- Отображение ошибки неопределённости для объекта, который вызывает
AttributeErrorпри доступе, не приводит к рекурсивной ошибке. #1177 - Отменить изменения в
PackageLoaderот версии 2.10, которые удалили зависимость от setuptools и pkg_resources, и добавили ограниченную поддержку пакетов с именованными пространствами. Изменения вызвали проблемы при использовании Pytest. Из-за сложности одновременной поддержки Python 2 и PEP 451 изменения отменены до версии 3.0. #1182 - Исправить номера строк в сообщениях об ошибках при удалении символов новой строки. #1178
- Специальный объект присваивания
namespace()в шаблонах работает в асинхронных средах. #1180 - Исправить удаление пробелов перед тегами в середине строк, когда включено
lstrip_blocks. #1138 -
NativeEnvironmentне оценивает промежуточные строки во время рендеринга. Это предотвращает раннюю оценку, которая могла бы изменить значение выражения. #1186
Версия 2.11.1
Выпущена 2020-01-30
- Исправить ошибку, которая препятствовала поиску ключа после атрибута (
{{ data.items[1:] }}) в асинхронном шаблоне. #1141
Версия 2.11.0
Выпущено 2020-01-27
- Прекращено поддерживать Python 2.6, 3.3 и 3.4. Это будет последняя версия, поддерживающая Python 2.7 и 3.5.
- Добавлен новый
ChainableUndefinedкласс для поддержки getitem и getattr на неопределённом объекте. #977 - Разрешена синтаксическая конструкция
{%+(с поведением NOP), когдаlstrip_blocksотключена. #748 - Добавлен параметр
defaultдля фильтраmap. #557 - Исключены глобальные переменные окружения из
meta.find_undeclared_variables(). #931 - Числовые литералы с плавающей точкой могут быть записаны в научном формате, например, 2.56e-3. #912, #922
- Целочисленные и числовые литералы с плавающей точкой могут быть записаны с разделителем «_» для лучшей читаемости, например, 12_345. #923
- Исправлена ошибка, вызывающая тупики в
LRUCache.setdefault. #1000 - Фильтр
trimпринимает необязательную строку символов для обрезки. #828 - Новый
jinja2.ext.debugрасширение добавляет тег{% debug %}для быстрого вывода текущего контекста и доступных фильтров и тестов. #174, #798, #983 - Разбор шаблонов с большим количеством пробелов стал значительно быстрее. #857, #858
- Скобки вокруг сравнений сохраняются, поэтому
{{ 2 * (3 < 5) }}выводит “2”, а не “False”. #755, #938 - Добавлены новые тесты
boolean,false,true,integerиfloat. #824 - Функция
finalizeокружения применяется только к результатам выражений (постоянным или нет), а не к статическим данным шаблона. #63 - При предоставлении нескольких путей к
FileSystemLoader, шаблон может иметь то же имя, что и каталог. #821 - Всегда возвращается
Undefined, если опущенelseв выражении{{ 'foo' if bar }}, независимо от классаundefinedокружения. Пропускelseявляется допустимым сокращением и не должен вызывать ошибку при использованииStrictUndefined. #710, #1079 - Исправлено поведение управляющих переменных
loopтаких какlengthиrevindex0при циклировании по генератору. #459, #751, #794, #993 - Поддержка асинхронности загружается только в первый раз, когда окружение её включает, чтобы избежать медленного начального импорта. #765
- В асинхронных окружениях фильтр
|mapбудет ожидать вызова фильтра при необходимости. #913 - В циклах for, которые обращаются к
loopатрибутам, итератор не продвигается вперёд до текущей итерации, если не доступныlength,revindex,nextitem, илиlast. Это снижает вероятность нарушения результатовgroupby. #555, #1101 - В асинхронных окружениях атрибуты
looplengthиrevindexработают с асинхронными итераторами. #1101 - В асинхронных средах значения, полученные из доступа к атрибутам/свойствам, будут ожидать выполнения, если необходимо. #1101
-
PackageLoaderне зависит от setuptools или pkg_resources. #970 -
PackageLoaderимеет ограниченную поддержку пространств имён PEP 420. #1097 - Поддержка объектов
os.PathLikeвFileSystemLoaderиModuleLoader. #870 -
NativeTemplateправильно обрабатывает кавычки между выражениями."'{{ a }}', '{{ b }}'"отображается как кортеж('1', '2'), а не строка'1, 2'. #1020 - Создание
NativeTemplateнапрямую создаётNativeEnvironment, а не по умолчаниюEnvironment. #1091 - После вызова
LRUCache.copy(), методы очереди копии указывают на правильную очередь. #843 - Компиляция шаблонов всегда записывает UTF-8, вместо использования кодировки по умолчанию системы. #889
-
|wordwrapфильтр рассматривает существующие переводы строк как отдельные параграфы, которые следует обрабатывать индивидуально, а не создавать короткие промежуточные строки. #175 - Добавлен параметр
break_on_hyphensк фильтру|wordwrap. #550 - Функции Cython, оформленные как функции контекста, будут передавать контекст. #1108
- При вычислении цепочек сравнений констант во время компиляции, результат соответствует поведению Python, возвращающий
False, если любое сравнение возвращаетFalse, а не только последнее. #1102 - Отладчики для исключений в шаблонах отображают правильные номера строк и источник для Python >= 3.7. #1104
- Отладчики для синтаксических ошибок шаблонов в Python 3 больше не показывают внутренние кадры компилятора. #763
- Добавлен узел
DerivedContextReference, который может использоваться расширениями для получения текущего контекста и локальных переменных, таких какloop. #860 - Свертка констант во время компиляции применяется к некоторым типам узлов, которые ранее игнорировались. #733
-
TemplateSyntaxError.sourceне пусто, когда поднято из включённого шаблона. #457 - Передача значения
Undefinedвget_template(например, черезextends,import, илиinclude), вызывает исключениеUndefinedErrorпоследовательно.select_templateотобразит сообщение об неопределённости в списке попыток, а не пустую строку. #1037 -
TemplateSyntaxErrorможет быть сериализован. #1117
Версия 2.10.3
Выпущено 2019-10-04
- Исправлена ошибка в точке входа Babel в
setup.py, которая мешала установке.
Версия 2.10.2
Выпущено 2019-10-04
- Исправлены предупреждения о устаревании Python 3.7.
- Использование
rangeв песочнице используетxrangeв Python 2, чтобы избежать использования памяти. #933 - Используется улучшенная поддержка отладчиков Python 3.7 для избежания аварийного завершения при использовании отладочных сборок Python 3.7. #1050
Версия 2.10.1
Выпущена 2019-04-06
-
SandboxedEnvironmentбезопасно обрабатываетstr.format_mapдля предотвращения выполнения кода через недоверенные форматированные строки. Песочница уже обрабатываетstr.format.
Версия 2.10
Выпущена 2017-11-08
- Добавлен новый узел расширения, называемый
OverlayScope, который можно использовать для создания не оптимизированного пространства имён, которое будет искать все переменные из производного контекста. - Добавлен
inтест, который работает как оператор `in`. Это можно использовать в сочетании сrejectиselect. - Добавлены
previtemиnextitemдля циклов, предоставляя доступ к предыдущему/следующему элементу в цикле. Если такого элемента не существует, значение равно undefined. - Добавлен
changed(*values)для циклов, предоставляя простой способ проверки, изменилось ли значение с последней итерации (или, скорее, с последнего вызова метода) - Добавлена функция
namespace, которая создаёт специальный объект, позволяющий назначать атрибуты с использованием тегаset. Это можно использовать для передачи данных между областями видимости, например, из тела цикла в код, идущий после цикла. - Добавлен модификатор
trimmedк{% trans %}для удаления символов новой строки и окружающих пробелов. Также добавлена новая политика для включения этого для всех блоковtrans. - Фильтр
randomбольше не ошибочно константно свернут и будет каждый раз генерировать новый случайный выбор при каждом рендеринге шаблона. #478 - Добавлен фильтр
unique. #469 - Добавлены фильтры
minиmax. #475 - Добавлены тесты для всех операторов сравнения:
eq,ne,lt,le,gt,ge. #665 -
importоператор не может заканчиваться запятой. #617, #618 -
indentфильтр по умолчанию не будет форматировать пустые строки. #685 - Добавлен аргумент
reverseдля фильтраdictsort. #692 - Добавлен
NativeEnvironment, который рендерит шаблоны в базовые типы Python вместо строк. #708 - Добавлена поддержка фильтров для тега блока
set. #489 -
tojsonфильтр отмечает вывод как безопасный, чтобы соответствовать документированному поведению. #718 - Исправлена ошибка, когда получение локальных переменных отладки для трассировки могла изменять контекст шаблона.
- Исправлена ошибка, когда большое количество блоков
{% elif ... %}приводило к ошибке «слишком много уровней вдавливания». Теперь эти блоки компилируются в базовыеelif ..:вместоelse: if ..:. #759
Версия 2.9.6
Выпущена 2017-04-03
- Исправлено поведение пользовательского контекста в быстром режиме разрешения #675
Версия 2.9.5
Выпущена 2017-01-28
- Восстановлено исходное представление внутреннего
_GroupTuple, поскольку это вызвало проблемы с ansible, и это была непреднамеренная модификация. #654 - Вернута поддержка пользовательских контекстов, которые переопределяют старый метод
resolve, так как людям было сложно заметить, что это могло вызвать регрессию. - Правильно используется буфер для блока else в циклах for. Это приводило к ошибкам синтаксиса на 2.x и полностью неправильному поведению на Python 3 #669
- Решена проблема, из-за которой тег
{% extends %}не мог использоваться в асинхронных средах. #668 - Незначительно уменьшен размер памяти путём сокращения объёма нашего файла базы данных Юникода, который используется для сопоставления идентификаторов на Python 3 #666
- Исправлен автоэскейп, который не работал для макросов в режиме асинхронной компиляции. #671
Версия 2.9.4
Выпущена 2017-01-10
- Решены некоторые предупреждения для строковых литералов. #646
- Увеличена версия кэша байткода, что не было сделано ранее из-за упущения.
- Исправлено плохое генерирование кода и области видимости для отфильтрованных циклов. #649
- Решена проблема, когда отключение вывода верхнего уровня после известных блоков extend могло генерировать неверный код, когда блоки были вложены в операторы if. #651
- Сделано значение
truncate.leewayпо умолчанию настраиваемым для повышения совместимости со старыми шаблонами.
Версия 2.9.3
Выпущена 2017-01-08
- Восстановлено использование блоков в макросах в той же мере, что и раньше. На Python 3 он отображал представление генератора вместо содержимого блока. #645
- Установлено согласованное поведение присваивания переменных во вложенных областях видимости, когда переменная также считывается из внешней области видимости. Теперь это поведение установлено во всех ситуациях, но это не восстанавливает старое поведение, где были возможны ограниченные присваивания во внешние области видимости. Дополнительную информацию и обсуждение можно найти в #641
- Решена проблема, когда
block scopedне использовал новые правила области видимости. В некоторых более экзотических случаях переменная, переопределённая в локальной области видимости, не попадала в блок. - Изменено генерирование кода оператора
withв соответствии с новыми правилами области видимости. Это устраняет некоторые маловероятные ошибки в крайних случаях. Это также вводит новый внутренний узелWith, который может использоваться расширениями.
Версия 2.9.2
Выпущена 2017-01-08
- Исправлена регрессия, которая привела к тому, что циклы for не могли использовать одну и ту же переменную для целевого итератора, а также для источника итератора. #640
- Добавлена поддержка ранее неизвестного поведения макросов. В некоторых случаях было возможно явно передать аргумент вызывающей функции макросу. Несмотря на то, что это было ошибочно и не предназначалось, оказывается, это распространённый случай, который часто копируется. Чтобы не нарушать обратную совместимость в самых распространённых случаях, теперь можно передать явный ключевой аргумент для вызывающей функции, если она получает явное значение по умолчанию. #642
Версия 2.9.1
Выпущена 2017-01-07
- Решена проблема с областью видимости блока вызова для макросов. Вложенные блоки вызывающей функции, использующие те же идентификаторы, что и внешние макросы, могли неправильно ссылаться на неправильную переменную.
Версия 2.9
Выпущена 2017-01-07, кодовое имя Derivation
- Изменено определение ключа кэша в среде. Это исправление регрессии производительности, введённой в 2.8.
- Добавлена поддержка
generator_stopна поддерживаемых версиях Python (Python 3.5 и выше) - Исправлена давняя проблема с приоритетом операторов математических операций, не соответствующим ожиданиям.
- Добавлена поддержка асинхронных итераторов Python 3.6 через новый асинхронный режим.
- Добавлены политики для значений по умолчанию фильтров и аналогичных вещей.
- Urlize теперь по умолчанию устанавливает «rel noopener».
- Поддержка обратного вызова атрибутов для классов старого стиля в 2.x.
- Поддержка операторов задания вверху в ситуациях extend.
- Восстановлено поведение Cycler для пользователей Python 3.
- Вычитание теперь следует тому же поведению, что и другие операторы, для неопределённых значений.
-
mapи аналогичные функции теперь выдают более подробные сообщения об ошибках, если вы забыли указать параметр в кавычках. - Зависимость от MarkupSafe 0.23 или выше.
- Улучшен фильтр
truncateдля лучшего усечения, в случае если строка усечена едва заметно. - Изменена логика автоматической обработки эскейпа макросов, основанная на информации о реальном автоэскейпе во время вызова, а не во время определения макроса.
- Переведён модифицированный вариант фильтра
tojsonиз Flask в Jinja и подключен к новой системе управления политиками. - Наборы блоков теперь по умолчанию отмечаются как
safe. - На Python 2 теперь можно отключить аскифицирование ASCII-строк с помощью политики
compiler.ascii_str. - Тесты теперь больше не принимают произвольное выражение в качестве первого аргумента, а ограниченное. Это означает, что теперь вы можете правильно использовать несколько тестов в одном выражении без дополнительных скобок. В частности, теперь вы можете написать
foo is divisibleby 2 or foo is divisibleby 3так, как ожидается. - Значительно изменена система области видимости, чтобы она лучше соответствовала ожиданиям разработчиков и дизайнеров шаблонов. Теперь больше нет магического различия между различными конструкциями include и import. Контекст всегда распространяется одинаково. Единственные оставшиеся различия – значения по умолчанию для
with contextиwithout context. - Теги
withиautoescapeтеперь встроенные. - Добавлена новая функция
select_autoescape, которая помогает легче настраивать автоэскейп. - Исправлена ошибка времени выполнения в песочнице при обращении к атрибутам асинхронных генераторов.
Версия 2.8.1
Выпущено 2016-12-29
- Исправлен флаг
for_qsдляurlencode. - Исправлена регрессия при применении
intк значениям, не являющимся строками. - БЕЗОПАСНОСТЬ: если используется режим песочницы, выражения форматирования теперь находятся в песочнице по тем же правилам, что и в Jinja. Это решает различные проблемы утечки информации, которые могут возникнуть с строками форматирования.
Версия 2.8
Выпущено 2015-07-26, кодовое имя Replacement
- Добавлен параметр
targetк функции urlize. - Добавлена поддержка
followsymlinksдля загрузчика файловой системы. - Фильтр truncate теперь считает длину.
- Добавлен фильтр equalto, который помогает с фильтрами select.
- Ключи кэша теперь используют абсолютные имена файлов, если они доступны, а не имена загрузки.
- Исправлено вычисление длины цикла для некоторых итераторов.
- Изменён способ, которым Jinja требует, чтобы строки были строками Python 2, чтобы работать, когда люди нарушают своё кодирование по умолчанию.
- Добавлен
make_logging_undefined, который возвращает неопределённый объект, который регистрирует сбои в логере. - Если неудачна разархивация кэшированных данных, шаблон теперь перегружается.
- Реализован тег блока
set. - Размер кэша по умолчанию был увеличен до 400 с низких 50.
- Исправлен тест
is numberдля принятия длинных целых чисел во всех версиях Python. - Изменён
is numberдля принятия Decimal как числа. - Добавлена проверка для аргументов по умолчанию, за которыми следуют аргументы, не по умолчанию. Это изменение делает
{% macro m(x, y=1, z) %}синтаксической ошибкой. Предыдущее поведение для этого кода было сломано (в результате значение по умолчанию применялось кy). - Добавлена возможность использования пользовательских подклассов
jinja2.compiler.CodeGeneratorиcontext_classпутём добавления двух новых атрибутов в среду (code_generator_classиcontext_class). #404 - Добавлена поддержка функций-декораторов context/environment/evalctx для обратного вызова finalize среды.
- Правильная экранировка последовательностей запроса для urlencode. Ранее слэши не экранировались в этом месте.
- Добавлен параметр «base» к фильтру «int».
Версия 2.7.3
Выпущено 2014-06-06
- Проблема безопасности: Исправлена исправление проблемы безопасности для папки кэша. Это исправление было предоставлено RedHat.
Версия 2.7.2
Выпущено 2014-01-10
- Загрузчик префиксов неправильно передавал локальные переменные во внутренние загрузчики. Теперь это исправлено.
- Проблема безопасности: Изменена папка по умолчанию для кэша файловой системы на пользовательскую и защищена на чтение и запись в системах UNIX. См. Debian bug 734747 для получения дополнительной информации.
Версия 2.7.1
Выпущено 2013-08-07
- Исправлена ошибка с
call_filter, которая не работала должным образом для фильтров среды и контекста. - Исправлен недостаток поддержки Python 3 для кэшей байткода.
- Отменена поддержка определения блоков в включённых шаблонах, так как это сломало существующие шаблоны для пользователей.
- Исправлены некоторые предупреждения с хэшированием неопределённых и узлов, если Python запущен с предупреждениями для Python 3.
- Добавлена поддержка правильного хэширования неопределённых объектов.
- Исправлена ошибка с фильтром title, который не работал со строками, уже преобразованными в верхний регистр.
Версия 2.7
Выпущено 2013-05-20, кодовое имя Translation
- Загрузчики выбора и префиксов теперь независимо отправляют поиск источника и шаблона, чтобы работать в сочетании с загрузчиками модулей, как рекламировалось.
- Исправлен filesizeformat.
- Добавлен не-молчаливый вариант для извлечения babel.
- Добавлен фильтр
urlencode, который автоматически приводит значения к кавычкам для безопасного использования в URL с utf-8 как единственной поддерживаемой кодировкой. Если приложения хотят изменить эту кодировку, они могут переопределить фильтр. - Добавлен параметр
keep-trailing-newlineв среды и шаблоны, чтобы по желанию сохранить конечный символ новой строки. - Обращение к
lastв контексте цикла больше не приводит к тому, что итератор потребляется в список. - Требование Python изменено: теперь требуются 2.6, 2.7 или >= 3.3, поддерживаются тем же исходным кодом, используя библиотеку совместимости «six».
- Разрешить
contextfunctionи другие декораторы применяться к__call__. - Добавлена поддержка изменения от новой строки к другим символам в фильтре
wordwrap. - Добавлена поддержка молчаливого игнорирования ошибок memcache.
- Добавлена поддержка сохранения конечной новой строки в шаблонах.
- Добавлена более тонкая поддержка удаления пробелов слева от блоков.
- Добавлены фильтры
map,select,reject,selectattrиrejectattr. - Добавлена поддержка
loop.depthдля определения глубины вложенности рекурсивного цикла. - Отключено py_compile для pypy и python 3.
Версия 2.6
Выпущено 2011-07-24, кодовое имя Convolution
- Внутренние атрибуты теперь вызывают ошибку внутреннего атрибута, а не возвращают неопределённый. Это исправляет проблемы при передаче неопределённых объектов в семантику Python, ожидающую API.
- Поддержка трассировки теперь работает должным образом для PyPy. (Проверено с 1.4)
- Реализовано перехват операторов для сред с песочницей. Это позволяет разработчикам приложений отключать встроенные операторы для повышения безопасности. (Например, ограничить математические операторы только фактическими целыми числами, а не длинными)
- Фильтр groupby теперь поддерживает обозначение точек для группировки по атрибутам атрибутов.
- Ограниченные блоки теперь правильно обрабатывают присваивания и импорты верхнего уровня. Ранее импорт внезапно «исчезал» в ограниченном блоке.
- Автоматически обнаруживаются более новые версии интерпретатора Python перед загрузкой кода из кэшей байткода, чтобы предотвратить сбой при неверных кодах операций. Сбой при ранних версиях Jinja здесь не был ошибкой Jinja, а ограничением в базовом интерпретаторе Python. Если вы заметите сбой Jinja в более ранних версиях после обновления интерпретатора Python, вам не нужно обновляться, достаточно очистить кэш байткода. Это просто больше не требуется, Jinja теперь автоматически обнаруживает эти случаи.
- Фильтр sum теперь может суммировать значения по атрибуту. Это изменение несовместимо со старыми версиями. Аргумент фильтра ранее был необязательным начальным индексом, который по умолчанию равен нулю. Теперь он стал вторым аргументом функции, потому что он редко используется.
- Как и sum, sort теперь также позволяет упорядочивать элементы по атрибуту.
- Как и sum и sort, join теперь также может соединять атрибуты объектов в строку.
- Внутренний контекст eval теперь имеет ссылку на среду.
- Добавлен тест сопоставления, чтобы проверить, является ли объект словарем или объектом с подобным интерфейсом.
Версия 2.5.5
Выпущено 2010-10-18
- Сгенерированная документация больше не входит в выпуск.
Версия 2.5.4
Выпущено 2010-10-17
- Исправлены расширения, которые не загружались должным образом с наложениями.
- Обход ошибки в cpython для отладчика, которая вызывает сбой при 64-разрядных архитектурах big-endian.
Версия 2.5.3
Выпущено 2010-10-17
- Исправлена ошибка порядка операторов, введённая в 2.5.2. Выражения вроде «-foo.bar» имели неявные скобки, применённые к первой части выражения («(-foo).bar»), вместо более правильного «-(foo.bar)».
Версия 2.5.2
Выпущено 2010-08-18
- Улучшен скрипт setup.py, чтобы он лучше работал с предположениями, которые люди могут всё ещё иметь от него (
--with-speedups). - Исправлена ошибка упаковки, которая исключала новую поддержку отладки.
Версия 2.5.1
Выпущено 2010-08-17
- Исключения StopIteration, поднятые функциями, вызываемыми из шаблонов, теперь перехватываются и преобразуются в неопределённые. Это решает множество проблем с отладкой. (StopIteration используется внутри для прерывания выполнения шаблона)
- Незначительно улучшена производительность вызовов макросов.
- Извлечение Babel теперь может правильно извлекать вызовы gettext в новом стиле.
- Использование переменной
numв gettext нового стиля для чего-то кроме счётчика множественного числа больше не будет подниматьKeyError. - Удалён встроенный класс markup и переключён на markupsafe. Для обратной совместимости чистая реализация на Python всё ещё существует, но взята из markupsafe разработчиками Jinja. Поддержка отладки вошла в отдельную функцию под названием «debugsupport» и отключена по умолчанию, так как она актуальна только для Python 2.4
- Исправлена ошибка с унарными операторами, имеющими неправильный приоритет.
Версия 2.5
Выпущено 2010-05-29, кодовое имя Incoherence
- Улучшен фильтр sort (должен был работать так с давних времён) путём добавления поддержки поиска без учёта регистра.
- Исправлена ошибка для getattribute constant folding.
- Поддержка переводов gettext нового стиля, что приводит к более удобному пользовательскому интерфейсу в шаблоне и более согласованным каталогам.
- Теперь можно регистрировать расширения после создания среды.
Версия 2.4.1
Выпущено 2010-04-20
- Исправлена ошибка отчёта об ошибках для неопределённого.
Версия 2.4
Выпущено 2010-04-13, кодовое имя Correlation
- Функции загрузки шаблонов среды теперь прозрачно передают объект шаблона, если он был передан в них. Это позволяет импортировать или расширять шаблон, который был передан в шаблон.
- Добавлен
ModuleLoader, который может загружать шаблоны из предварительно скомпилированных источников. Среда теперь предоставляет метод для компиляции шаблонов из настроенного загрузчика в zip-архив или папку. - Расширение _speedups C теперь поддерживает Python 3.
- Добавлена поддержка автоматического переключения автоэкранирования и поддержка контекстов вычислений.
- У расширений теперь есть приоритет.
Версия 2.3.1
Выпущено 2010-02-19
- Исправлена ошибка отчёта об ошибках для всех версий Python
- Исправлена ошибка отчёта об ошибках для Python 2.4
Версия 2.3
Выпущено 2010-02-10, кодовое имя 3000 Pythons
- Исправлена проблема с генератором кода, которая приводила к генерации несвязанных переменных, если в блоках if использовался set, а также исправлены другие мелкие проблемы с идентификаторами.
- Теги include теперь могут выбирать между несколькими шаблонами и брать первый существующий, если задан список шаблонов.
- Исправлена проблема с блоками вызова во внешних областях видимости, имеющими аргумент, который также используется как локальная переменная во внутренней области видимости #360.
- Значительно улучшено сообщение об ошибке #339
- Неявные кортежи больше не могут быть совершенно пустыми. Это изменение делает
{% if %}синтаксической ошибкой. #364 - Добавлена поддержка комментариев переводчика, если они извлечены с помощью babel.
- Добавлен расширение with-statement.
- Экспериментальная поддержка Python 3.
Версия 2.2.1
Выпущено 2009-09-14
- Исправлены некоторые мелкие проблемы Jinja для Jython.
Версия 2.2
Выпущено 2009-09-13, кодовое имя Kong
- Теперь операторы include могут быть помечены
ignore missing, чтобы пропустить несуществующие шаблоны. - Приоритет
notповышен. Теперь можно записатьnot foo in barкак псевдоним дляfoo not in barтак же, как в Python. Ранее грамматика требовала скобки (not (foo in bar)), что было странно. - Исправлена ошибка, которая приводила к синтаксическим ошибкам при определении макросов или использовании тега
{% call %}внутри циклов. - Исправлена ошибка в парсере, которая делала
{{ foo[1, 2] }}невозможной. - Возможность ссылаться на имена из внешних областей видимости во включённых шаблонах, которые не использовались в области видимости вызывающего шаблона #327
- Исправлена ошибка, которая приводила к внутренним ошибкам, если имена использовались как переменные итерации и обычные переменные после цикла, если эта переменная не использовалась перед циклом. #331
- Добавлена поддержка необязательного
scopedмодификатора для блоков. - Добавлена поддержка комментариев в строке.
- Добавлен модуль
meta. - Переименовано (недокументированное) свойство “overlay” в “overlayed” в среде, поскольку оно конфликтовало с методом с таким же именем.
- Расширение Speedup теперь по умолчанию отключено.
Версия 2.1.1
Выпущено 2008-12-25
- Исправлена ошибка перевода, вызванная циклированием по пустым рекурсивным циклам.
Версия 2.1
Выпущено 2008-11-23, кодовое имя Yasuzō
- Исправлена ошибка с вложенными циклами и специальной переменной цикла. Ранее внутренний цикл перезаписывал переменную цикла из внешнего цикла после итерации.
- Исправлена ошибка с расширением i18n, которая приводила к поиску неправильной переменной в явном блоке множественного числа.
- Исправлено ограничение в лексическом анализаторе, которое делало
{{ foo.0.0 }}невозможным. - Индексированное обращение к переменным с постоянным значением теперь возвращает неопределённый объект вместо возбуждения ошибки индекса. Это была ошибка, вызванная ранней оптимизацией.
- Расширение i18n теперь ищет
foo.ugettextза которым следуетfoo.gettext, если установлен объект перевода. Это упрощает работу с настраиваемыми классами переводов. - Исправлено запутанное поведение с условным расширением. Циклы частично выполнялись в некоторых условиях, даже если они не были частью видимой области.
- Добавлен фильтр
sort, который работает какdictsort, но для произвольных последовательностей. - Исправлена ошибка с пустыми операторами в макросах.
- Реализована система кэширования байткода.
- Контекст шаблона теперь может быть слабым ссылкой (weakref-able).
- Включения и импорты «с контекстом» теперь передают все переменные, а не только начальный контекст.
- Добавлен вспомогательный цикл, называемый
cycler. - Добавлен вспомогательный метод объединения, называемый
joiner. - Добавлен метод
compile_expressionв среду, позволяющий компилировать выражения Jinja в вызываемые объекты Python. - Исправлена ошибка экранирования в urlize
Версия 2.0
Выпущено 2008-07-17, кодовое имя Jinjavitus
- Обращение к объектам (поиск атрибутов и элементов) изменилось. Теперь можно задать атрибутам или элементам более высокий приоритет, используя запись с точкой или квадратную нотацию. Это также немного изменило AST.
Subscriptубрано и заменено наGetitemиGetattr. - Добавлена поддержка предобработки и фильтрации потока токенов для расширений. Это позволит расширениям упростить вызовы gettext в данных шаблонов и аналогичные вещи.
- Добавлен
TemplateStream.dump. - Добавлена недостающая поддержка неявного конкатенации строковых литералов.
{{ "foo" "bar" }}эквивалентно{{ "foobar" }} -
elseявляется необязательным для условных выражений. Если не задано, оно вычисляется какfalse. - Улучшена отчётность об ошибках для неопределённых значений, указанием позиции.
-
Фильтр
filesizeformatтеперь по умолчанию использует десятичные префиксы и может быть переведён в двоичный режим со вторым параметром. - Исправлена ошибка в финализаторе
Версия 2.0rc1
Выпущено 2008-06-09
- Первый релиз Jinja 2.
© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://jinja.palletsprojects.com/en/3.0.x/changes/