Изменения
Версия 3.1.3
Не выпущена
- Исправлена ошибка компилятора при проверке, являются ли необходимые блоки в родительских шаблонах пустыми. #1858
Версия 3.1.2
Выпущена 2022-04-28
Версия 3.1.1
Выпущена 2022-03-25
- Имя файла шаблона в Windows использует основной разделитель пути. #1637
Версия 3.1.0
Выпущена 2022-03-24
- Отказ от поддержки Python 3.6. #1534
-
Удаление ранее устаревшего кода. #1544
-
WithExtensionиAutoEscapeExtensionтеперь встроенные. -
contextfilterиcontextfunctionзаменены наpass_context.evalcontextfilterиevalcontextfunctionзаменены наpass_eval_context.environmentfilterиenvironmentfunctionзаменены наpass_environment. -
Markupиescapeследует импортировать из MarkupSafe. - Скомпилированные шаблоны из очень старых версий Jinja могут потребовать повторной компиляции.
- Устаревший режим разрешения для подклассов
Contextбольше не поддерживается. Вместоresolveпереопределитеresolve_or_missing. -
unicode_urlencodeпереименовано вurl_quote.
-
- Добавлена поддержка встроенных типов в макросах. #1510
- Тег
{% trans %}может использоватьpgettextиnpgettext, передавая строку контекста как первый токен в теге, например,{% trans "title" %}. #1430 - Обновление допустимых символов идентификатора от Python 3.6 до 3.7. #1571
- Фильтры и тесты, помеченные
@async_variant, подлежат сериализации. #1612 - Добавление фильтра
items. #1561 - Подписи (
[0], и т. д.) могут использоваться после фильтров, тестов и вызовов, когда среда находится в асинхронном режиме. #1573 - Фильтр
groupbyпо умолчанию не чувствителен к регистру, соответствуя другим фильтрам сравнения. Добавлен параметрcase_sensitive, чтобы управлять этим. #1463 - Сегменты пути относительно диска Windows в именах шаблонов больше не приведут к
FileSystemLoaderиPackageLoaderзагружающимся из путей относительно диска. #1621
Версия 3.0.3
Выпущена 2021-11-09
- Исправление переписывания трассировки для Python 3.10 и 3.11. #1535
- Исправление того, как нативная среда обрабатывает ведущие и хвостовые пробелы при разборе значений в Python 3.10. #1537
- Улучшение асинхронной производительности путем исключения проверок для общих типов. #1514
- Откат изменения поведения
hash(Node). Узлы снова хешируются по идентификатору #1521 -
PackageLoaderработает, когда пакет является единственным файлом модуля. #1512
Версия 3.0.2
Выпущена 2021-10-04
- Исправление ошибки области видимости цикла, которая приводила к тому, что назначения в вложенных циклах по-прежнему ссылались вне его. #1427
- Делает
compile_templatesдетерминированным для имен фильтров и импорта. #1452, #1453 - Откат непреднамеренного изменения, которое привело к тому, что
Undefinedдействовал какStrictUndefinedдля оператораin. #1448 - Импортированные макросы имеют доступ к текущим глобальным переменным шаблона в асинхронных средах. #1494
-
PackageLoaderне будет включать сегмент пути текущей директории (.). Это позволяет загружать шаблоны из корня импорта zip. #1467
Версия 3.0.1
Выпущена 2021-05-18
- Обновление зависимости MarkupSafe до >= 2.0. #1418
- Помечаем имена верхнего уровня как экспортируемые, чтобы проверка типов понимала импорты в пользовательских проектах. #1426
- Исправление некоторых типов, которых не было в Python 3.6.0. #1433
- Предупреждение об устаревании для неиспользуемых расширений
autoescapeиwith_отображает более релевантный контекст. #1429 - Исправлен вызов устаревшего
jinja2.Markupбез аргумента. Используйтеmarkupsafe.Markupвместо этого. #1438 - Вызов синхронного
renderдля асинхронного шаблона используетasyncio.runв Python >= 3.7. Это исправляет устаревание, которое вводит Python 3.10. #1443
Версия 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 - Исправление зависания при отображении отладочных трассировок в Python 32-бит. #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для предотвращения выполнения кода через недоверенные строки форматирования. Sandbox уже обрабатывал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 - Незначительно уменьшен объем памяти за счет уменьшения объема базы данных Unicode, используемой для соответствия идентификаторов в 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.
- Поддержка операторов set на верхнем уровне в ситуациях extend.
- Восстановлено поведение Cycler для пользователей Python 3.
- Вычитание теперь следует тому же поведению, что и другие операторы, для неопределённых значений.
-
mapи аналогичные функции теперь выдадут более подробные сообщения об ошибках, если вы забыли указать параметр. - Зависимость от MarkupSafe 0.23 или выше.
- Улучшен фильтр
truncateдля лучшего усечения, если строка почти не усечена. - Изменён логика автоэскейпинга макросов, которая теперь основана на информации о времени выполнения автоэскейпинга при вызове, а не на времени определения макроса.
- Портирована модифицированная версия фильтра
tojsonиз Flask в Jinja и подключена к новой системе политик. - Наборы блоков по умолчанию отмечаются как
safe. - В Python 2 теперь можно отключить ASCII-преобразование 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иjinja2.runtime.Context, добавив два новых атрибута в среду (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
- Загрузчик префиксов не правильно передавал locals в внутренние загрузчики. Теперь это исправлено.
- Проблема безопасности: Изменена папка по умолчанию для кэша файловой системы на папку, специфичную для пользователя, и защищённую для чтения и записи в системах 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 теперь может суммировать значения по атрибуту. Это изменение несовместимо со старыми версиями. Аргумент фильтра ранее был необязательным начальным индексом по умолчанию 0. Теперь это второй аргумент функции, так как он редко используется.
- Как и sum, sort теперь также позволяет упорядочивать элементы по атрибуту.
- Как и sum и sort, join теперь также может соединять атрибуты объектов в строку.
- Внутренний контекст eval теперь имеет ссылку на среду.
- Добавлен тест сопоставления, чтобы определить, является ли объект словарем или объектом с похожим интерфейсом.
Версия 2.5.5
Выпущено 2010-10-18
- Документация, созданная с помощью сборки, больше не входит в выпуск.
Версия 2.5.4
Выпущено 2010-10-17
- Исправлены расширения, которые не загружались должным образом с наложением.
- Обход ошибки в cpython для отладчика, которая вызывает сегфолты на 64-битных архитектурах большого порядка байтов.
Версия 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 теперь может правильно извлекать вызовы newstyle gettext.
- Использование переменной
numв newstyle gettext для чего-то, кроме счётчика множественного числа, больше не будет вызыватьKeyError. - Удален встроенный класс markup и переключено на markupsafe. Для обратной совместимости чистая реализация на Python всё ещё существует, но взята из markupsafe разработчиками Jinja. Поддержка отладки перешла в отдельный функционал под названием «debugsupport» и отключена по умолчанию, так как она актуальна только для Python 2.4
- Исправлена проблема с неправильным приоритетом унарных операторов.
Версия 2.5
Выпущено 2010-05-29, кодовое имя Incoherence
- Улучшен фильтр sort (должен был работать так с давних пор) путем добавления поддержки поиска без учёта регистра.
- Исправлена ошибка для getattribute постоянной сворачивания.
- Поддержка newstyle 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
- Исправлена проблема с генератором кода, которая приводила к генерации несвязанных переменных, если использовался оператор `set` в блоках `if`, а также исправлены другие мелкие проблемы с идентификаторами.
- Теги `include` теперь могут выбирать между несколькими шаблонами и брать первый существующий, если задан список шаблонов.
- Исправлена проблема с блоками вызовов во внешних областях видимости, имеющих аргумент, который также используется как локальная переменная во внутреннем фрейме #360.
- Значительно улучшена система сообщений об ошибках #339
- Неявные кортежи больше не могут быть полностью пустыми. Это изменение делает
{% if %}синтаксической ошибкой теперь. #364 - Добавлена поддержка комментариев для переводчиков, если они извлекаются с помощью `babel`.
- Добавлена поддержка оператора `with`.
- Экспериментальная поддержка 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» в среде, так как оно вступало в конфликт с методом с тем же именем.
- Расширение ускорения по умолчанию отключено.
Версия 2.1.1
Выпущена 2008-12-25
- Исправлена ошибка перевода, вызванная циклом по пустым рекурсивным циклам.
Версия 2.1
Выпущена 2008-11-23, кодовое название Yasuzō
- Исправлена ошибка с вложенными циклами и специальной переменной цикла. Раньше внутренний цикл перезаписывал переменную цикла внешнего цикла после итерации.
- Исправлена ошибка в расширении i18n, которая приводила к поиску неправильной переменной для блока явного множественного числа.
- Исправлено ограничение в лексическом анализатор, которое делало
{{ foo.0.0 }}невозможным. - Индексированное обращение к переменным с константным значением теперь возвращает неопределённый объект вместо повышения ошибки индекса. Это была ошибка, вызванная ранней оптимизацией.
- Расширение i18n теперь ищет
foo.ugettextза которым следуетfoo.gettext, если установлен объект перевода. Это упрощает работу с пользовательскими классами перевода. - Исправлено запутанное поведение с условным расширением. Циклы частично выполнялись в некоторых условиях, даже если они не входили в видимую область.
- Добавлен фильтр
sort, который работает какdictsort, но для произвольных последовательностей. - Исправлена ошибка с пустыми операторами в макросах.
- Реализована система кеширования байт-кода.
- Контекст шаблона теперь может быть weakref-совместимым.
- Включения и импорты «с контекстом» теперь передают все переменные, а не только начальный контекст.
- Добавлен помощник для циклов, называемый
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.1.x/changes/