变化 — Jinja 文档
来自菜鸟教程
Jinja/docs/3.0.x/changes
变化
版本 3.0.3
发布 2021-11-09
- 修复 Python 3.10 和 3.11 的回溯重写内部结构。 :问题:`1535`
- 修复在 Python 3.10 上解析值时本机环境如何处理前导和尾随空格。 :pr:`1537`
- 通过避免检查常见类型来提高异步性能。 :问题:`1514`
- 恢复对
hash(Node)
行为的更改。 节点再次按 id 散列 :issue:`1521` PackageLoader
当包是单个模块文件时有效。 :问题:`1512`
版本 3.0.2
发布 2021-10-04
- 修复了导致嵌套循环中的赋值仍然在其外部引用的循环范围错误。 :问题:`1427`
- 使
compile_templates
确定过滤器和导入名称。 :问题:`1452, 1453` - 恢复导致
Undefined
像in
操作员的StrictUndefined
一样的意外更改。 :问题:`1448` - 导入的宏可以访问异步环境中的当前模板全局变量。 :问题:`1494`
PackageLoader
将不包括当前目录 (.) 路径段。 这允许从 zip 导入的根目录加载模板。 :问题:`1467`
版本 3.0.1
发布 2021-05-18
- 将 MarkupSafe 依赖项更新为 >= 2.0。 :pr:`1418`
- 将顶级名称标记为导出,以便类型检查理解用户项目中的导入。 :问题:`1426`
- 修复一些在 Python 3.6.0 中不可用的类型。 :问题:`1433`
- 不需要的
autoescape
和with_
扩展的弃用警告显示了更相关的上下文。 :问题:`1429` - 修复了不推荐使用的
jinja2.Markup
调用不带参数的问题。 请改用markupsafe.Markup
。 :问题:`1438` - 在 Python >= 3.7 上为异步模板调用同步
render
使用asyncio.run
。 这修复了 Python 3.10 引入的弃用问题。 :问题:`1443`
版本 3.0.0
发布 2021-05-11
- 放弃对 Python 2.7 和 3.5 的支持。
- 将 MarkupSafe 依赖项提升到 >=1.1。
- 将 Babel 可选依赖项提升到 >=2.1。
- 删除标记为已弃用的代码。
- 添加类型提示。 :pr:`1412`
- 使用 PEP 451 API 加载带有 PackageLoader 的模板。 :问题:`1168`
- 修复导致导入的宏无法访问当前模板的全局变量的错误。 :问题:`688`
- 添加使用
+%}
忽略trim_blocks
的能力。 :问题:`1036` - 修复了导致自定义仅异步过滤器因恒定输入而失败的错误。 :问题:`1279`
- 修复 UndefinedError 在未定义变量上被错误抛出,而不是在 Python 3.10 上的
NativeEnvironment
上返回Undefined
。 :问题:`1335` - 块可以标记为
required
。 它们必须在某个时候被覆盖,但不一定被直接子代覆盖。 :问题:`1147` - 弃用
autoescape
和with
扩展,它们是编译器内置的。 :问题:`1203` urlize
过滤器识别mailto:
链接并带extra_schemes
(或env.policies["urlize.extra_schemes"]
)识别其他方案。 它尝试平衡 URL 中的括号而不是忽略尾随字符。 总体上的解析已更新,以提高效率并匹配更多案例。 没有方案的 URL 链接为https://
,而不是http://
。 :issue:`522, 827, 1172`, :pr:`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
修饰。 :issue:`842`, :pr:`1248` - 在 i18n 扩展中支持
pgettext
和npgettext
(消息上下文)。 :问题:`441` |indent
过滤器的width
参数可以是要缩进的字符串。 :pr:`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 中使用单词字符。 :pr:`1343`
版本 2.11.2
发布 2020-04-13
- 修复了导致具有
__getattr__
的可调用对象(例如Mock
)被视为 contextfunction() 的错误。 :问题:`1145` - 通过将输入包装在
soft_str()
中,更新wordcount
过滤器以触发 Undefined 方法。 :pr:`1160` - 修复在 Python 32 位上显示回溯时的挂起。 :问题:`1162`
- 显示在访问时引发
AttributeError
的对象的未定义错误不会导致递归错误。 :问题:`1177` - 从 2.10 恢复对 PackageLoader 的更改,它删除了对 setuptools 和 pkg_resources 的依赖,并添加了对命名空间包的有限支持。 这些更改在使用 Pytest 时引起了问题。 由于难以同时支持 Python 2 和 PEP 451,更改将恢复到 3.0。 :pr:`1182`
- 删除换行符时修复错误消息中的行号。 :pr:`1178`
- 模板中特殊的
namespace()
赋值对象适用于异步环境。 :问题:`1180` - 修复启用
lstrip_blocks
时行中间标记前删除的空格。 :问题:`1138` - NativeEnvironment 在渲染过程中不评估中间字符串。 这可以防止可能更改表达式值的早期评估。 :问题:`1186`
版本 2.11.0
发布 2020-01-27
- 放弃对 Python 2.6、3.3 和 3.4 的支持。 这将是支持 Python 2.7 和 3.5 的最后一个版本。
- 添加了一个新的
ChainableUndefined
类以支持未定义对象上的 getitem 和 getattr。 :问题:`977` - 当
lstrip_blocks
被禁用时,允许{%+
语法(具有 NOP 行为)。 :问题:`748` - 为
map
过滤器添加了default
参数。 :问题:`557` - 从 meta.find_undeclared_variables() 中排除环境全局变量。 :问题:`931`
- 浮点字面量可以用科学记数法书写,如 2.56e-3。 :issue:`912`, :pr:`922`
- Int 和 float 文字可以使用“_”分隔符编写以提高可读性,例如 12_345。 :pr:`923`
- 修复导致
LRUCache.setdefault
中死锁的错误。 :pr:`1000` trim
过滤器采用可选的字符串进行修剪。 :pr:`828`- 一个新的
jinja2.ext.debug
扩展添加了一个{% debug %}
标签来快速转储当前上下文和可用的过滤器和测试。 :issue:`174`, :pr:`798, 983` - 具有大量空白的词法模板要快得多。 :issue:`857`, :pr:`858`
- 保留比较的括号,因此
{{ 2 * (3 < 5) }}
输出“2”而不是“False”。 :issue:`755`, :pr:`938` - 添加新的
boolean
、false
、true
、integer
和float
测试。 :pr:`824` - 环境的
finalize
函数仅适用于表达式的输出(常量与否),不适用于静态模板数据。 :问题:`63` - 当提供到
FileSystemLoader
的多个路径时,模板可以与目录具有相同的名称。 :问题:`821` - 无论环境的
undefined
类如何,在模板:'foo' if bar
表达式中省略else
子句时,始终返回 Undefined。 省略else
子句是一个有效的快捷方式,在使用 StrictUndefined 时不应引发错误。 :issue:`710`, :pr:`1079` - 在循环生成器时修复
loop
控制变量的行为,例如length
和revindex0
。 :issue:`459, 751, 794`, :pr:`993` - 异步支持仅在环境首次启用时加载,以避免初始导入缓慢。 :问题:`765`
- 在异步环境中,如果需要,
|map
过滤器将等待过滤器调用。 :pr:`913` - 在访问
loop
属性的 for 循环中,除非length
、revindex
、nextitem
或 [ X154X] 被访问。 这使得破坏groupby
结果的可能性降低。 :issue:`555`, :pr:`1101` - 在异步环境中,
loop
属性length
和revindex
适用于异步迭代器。 :pr:`1101` - 在异步环境中,如果需要,将等待来自属性/属性访问的值。 :pr:`1101`
PackageLoader
不依赖于 setuptools 或 pkg_resources。 :问题:`970`PackageLoader
对 PEP 420 命名空间包的支持有限。 :问题:`1097`- 支持
FileSystemLoader
和ModuleLoader
中的os.PathLike
对象。 :问题:`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 编译的函数装饰为上下文函数将传递上下文。 :pr:`1108`
- 当在编译时计算常量的链式比较时,如果任何比较返回
False
,而不仅仅是最后一个,则结果遵循 Python 返回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
可以腌制。 :pr:`1117`
版本 2.10.3
发布 2019-10-04
- 修复
setup.py
中 Babel 入口点中阻止安装的拼写错误。
版本 2.10.2
发布 2019-10-04
- 修复 Python 3.7 弃用警告。
- 在沙盒环境中使用
range
在 Python 2 上使用xrange
以避免内存使用。 :问题:`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
到循环上下文,提供对循环中上一个/下一个项目的访问。 如果这样的项目不存在,则该值是未定义的。 - 添加了
changed(*values)
到循环上下文,提供了一种简单的方法来检查自上次迭代以来(或者更确切地说是自上次调用该方法以来)值是否已更改 - 添加了一个
namespace
函数,该函数创建一个允许使用set
标签进行属性分配的特殊对象。 这可用于跨范围传送数据,例如 从循环体到循环后的代码。 - 将
trimmed
修饰符添加到{% trans %}
以去除换行符和周围的空白。 还添加了一个新策略来为所有trans
块启用此功能。 random
过滤器不再错误地固定折叠,每次渲染模板时都会产生一个新的随机选择。 :pr:`478`- 添加了
unique
过滤器。 :pr:`469` - 添加了
min
和max
过滤器。 :pr:`475` - 添加了所有比较运算符的测试:
eq
、ne
、lt
、le
、gt
、ge
。 :pr:`665` import
语句不能以逗号结尾。 :pr:`617`, :pr:`618`indent
过滤器默认不会缩进空行。 :pr:`685`- 为
dictsort
过滤器添加reverse
参数。 :pr:`692` - 添加
NativeEnvironment
将模板呈现为原生 Python 类型而不是字符串。 :pr:`708` - 为块
set
标签添加了过滤器支持。 :pr:`489` tojson
过滤器将输出标记为安全以匹配记录的行为。 :pr:`718`- 解决了获取回溯的调试本地变量可以修改模板上下文的错误。
- 修复了一个错误,即有很多
{% elif ... %}
块会导致“缩进级别过多”错误。 这些块现在编译为本机elif ..:
而不是else: if ..:
:issue:`759`
版本 2.9.5
发布 2017-01-28
- 恢复了内部
_GroupTuple
的原始 repr,因为这会导致 ansible 出现问题,这是一个意外更改。 :问题:`654` - 添加了对覆盖旧
resolve
方法的自定义上下文的支持,因为人们很难发现这可能会导致回归。 - 正确地将缓冲区用于 for 循环的 else 块。 这导致在 2.x 上导致无效的语法错误和在 Python 3 上完全错误的行为 :issue:`669`
- 解决了
{% extends %}
标签无法用于异步环境的问题。 :问题:`668` - 通过减少我们用于 Python 3 上的标识符匹配的 unicode 数据库转储来稍微减少内存占用:问题:`666`
- 修复了自动转义不适用于异步编译模式下的宏。 :问题:`671`
版本 2.9.4
发布 2017-01-10
- 解决了一些字符串文字的警告。 :问题:`646`
- 增加之前由于疏忽而未完成的字节码缓存版本。
- 更正了过滤循环的错误代码生成和范围。 :问题:`649`
- 解决了当块包含在 if 语句中时,已知扩展块之后的顶级输出静默可能会生成无效代码的问题。 :问题:`651`
- 使
truncate.leeway
默认可配置以提高与旧模板的兼容性。
版本 2.9.3
发布 2017-01-08
- 将宏中块的使用恢复到以前可能的扩展。 在 Python 3 上,它将呈现生成器 repr 而不是块内容。 :问题:`645`
- 当变量也从外部作用域读取时,为内部作用域中的变量分配设置一致的行为。 这现在在所有情况下都设置了预期的行为,但是它不会恢复旧的行为,在这种情况下,可以对外部范围进行有限的分配。 有关更多信息和讨论,请参阅 :issue:`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 发布,代号衍生
- 在环境中更改缓存键定义。 这修复了 2.8 中引入的性能回归。
- 在受支持的 Python 版本(Python 3.5 及更高版本)上添加了对
generator_stop
的支持 - 更正了数学运算的运算符优先级不是预期的长期问题。
- 通过新的异步模式添加了对 Python 3.6 异步迭代器的支持。
- 添加了用于过滤器默认值和类似内容的策略。
- Urlize 现在默认设置“rel noopener”。
- 支持 2.x 中旧式类的属性回退。
- 在扩展情况下支持顶级 set 语句。
- 为 Python 3 用户恢复了 Cycler 的行为。
- 减法现在遵循与未定义值的其他运算符相同的行为。
- 如果您忘记引用参数,
map
和朋友现在会给出更好的错误消息。 - 依赖 MarkupSafe 0.23 或更高版本。
- 改进了
truncate
过滤器,以在字符串几乎没有被截断的情况下支持更好的截断。 - 将宏自动转义的逻辑更改为基于调用时的运行时自动转义信息,而不是宏定义时间。
- 将
tojson
过滤器的修改版本从 Flask 移植到 Jinja,并将其与新的策略框架连接起来。 - 块集现在默认标记为
safe
。 - 在 Python 2 上,现在可以使用
compiler.ascii_str
策略禁用 ASCII 字符串的 asciification。 - 测试现在不再接受任意表达式作为第一个参数,而是一个受限制的。 这意味着您现在可以在一个表达式中正确使用多个测试而无需额外的括号。 特别是,您现在可以按预期编写
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
- 修复了
urlencode
的for_qs
标志。 - 修复了将
int
应用于非字符串值时的回归。 - 安全性:如果使用沙盒模式,格式表达式现在使用与 Jinja 中相同的规则进行沙盒化。 这解决了格式字符串可能出现的各种信息泄漏问题。
版本 2.8
2015-07-26 发布,代号替换
- 向 urlize 函数添加了
target
参数。 - 向文件系统加载器添加了对
followsymlinks
的支持。 - 截断过滤器现在计算长度。
- 添加了有助于选择过滤器的 equalto 过滤器。
- 更改缓存键以使用绝对文件名(如果可用)而不是加载名称。
- 修复了一些迭代器的循环长度计算。
- 改变了 Jinja 如何强制字符串成为 Python 2 中的本地字符串,以便在人们破坏他们的默认编码时工作。
- 添加了
make_logging_undefined
,它返回一个未定义的对象,该对象将故障记录到记录器中。 - 如果缓存数据的解组失败,模板将立即重新加载。
- 实现了一个块
set
标签。 - 默认缓存大小从低的 50 增加到 400。
- 修复了
is number
测试以在所有 Python 版本中接受长整数。 - 将
is number
更改为接受十进制作为数字。 - 添加了对默认参数的检查,然后是非默认参数。 此更改使
{% macro m(x, y=1, z) %}
成为语法错误。 无论如何,此代码的先前行为已被破坏(导致将默认值应用于y
)。 - 通过向环境添加两个新属性(
code_generator_class
和context_class
),添加使用jinja2.compiler.CodeGenerator
和jinja2.runtime.Context
的自定义子类的能力。 :pr:`404` - 在环境的 finalize 回调中添加了对 context/environment/evalctx 装饰器函数的支持。
- 正确转义 urlencode 的查询字符串。 以前在那个地方没有转义斜线。
- 将“base”参数添加到“int”过滤器。
版本 2.7.3
发布 2014-06-06
- 安全问题:更正了缓存文件夹的安全修复程序。 此修复程序由 RedHat 提供。
版本 2.7.2
发布 2014-01-10
- 前缀加载器没有正确地将本地人转发到内部加载器。 现在已修复。
- 安全问题:将文件系统缓存的默认文件夹更改为特定于用户并在 UNIX 系统上进行读写保护。 有关更多信息,请参阅 Debian 错误 734747。
版本 2.7.1
发布 2013-08-07
- 修复了
call_filter
在环境和上下文过滤器上无法正常工作的错误。 - 修复了缺少 Python 3 对字节码缓存的支持。
- 恢复了对在包含模板中定义块的支持,因为这破坏了用户的现有模板。
- 如果 Python 运行时出现 Python 3 的警告,则修复了一些带有未定义和节点散列的警告。
- 添加了对正确散列未定义对象的支持。
- 修复了标题过滤器不适用于已经大写的字符串的错误。
版本 2.7
2013-05-20 发布,代号翻译
- 选择和前缀加载器现在分别调度源和模板查找,以便与广告中的模块加载器结合使用。
- 固定文件大小格式。
- 为 babel 提取添加了一个非静音选项。
- 添加了
urlencode
过滤器,该过滤器自动引用值以使用 utf-8 作为仅支持的编码的 URL 安全使用。 如果应用程序想要更改此编码,他们可以覆盖过滤器。 - 向环境和模板添加了
keep-trailing-newline
配置,以选择性地保留最后的尾随换行符。 - 在循环上下文中访问
last
不再导致迭代器被消耗到列表中。 - Python 要求已更改:现在需要 2.6、2.7 或 >= 3.3,由相同的源代码支持,使用“六”兼容库。
- 允许
contextfunction
和其他装饰器应用于__call__
。 - 添加了对
wordwrap
过滤器中从换行符更改为不同符号的支持。 - 添加了对静默忽略内存缓存错误的支持。
- 添加了对在模板中保留尾随换行符的支持。
- 添加了对去除块左侧空白的更细粒度的支持。
- 添加了
map
、select
、reject
、selectattr
和rejectattr
过滤器。 - 添加了对
loop.depth
的支持,以确定代码在递归循环中的深度。 - 为 pypy 和 python 3 禁用了 py_compile。
版本 2.6
2011-07-24 发布,代号卷积
- 内部属性现在会引发内部属性错误,而不是返回未定义。 这解决了将未定义对象传递给需要 API 的 Python 语义时的问题。
- 回溯支持现在适用于 PyPy。 (用 1.4 测试)
- 为沙盒环境实现了操作员拦截。 这允许应用程序开发人员禁用内置运算符以提高安全性。 (例如将数学运算符限制为实际整数而不是长整数)
- Groupby 过滤器现在支持用于按属性的属性分组的点号表示法。
- 作用域块现在可以正确处理顶级分配和导入。 以前一个导入突然“消失”在一个作用域块中。
- 在从字节码缓存加载代码之前自动检测较新的 Python 解释器版本,以防止无效操作码上的段错误。 早期 Jinja 版本中的段错误不是 Jinja 错误,而是底层 Python 解释器的限制。 如果您在升级 Python 解释器后注意到早期版本中的 Jinja 段错误,则无需升级,刷新字节码缓存就足够了。 这不再需要这样做,Jinja 现在会自动检测这些情况。
- 总和过滤器现在可以按属性汇总值。 这是向后不兼容的更改。 先前过滤器的参数是可选的起始索引,默认为零。 这现在成为函数的第二个参数,因为它很少使用。
- 与 sum 一样,sort 现在也可以按属性对项目进行排序。
- 与 sum 和 sort 一样,join 现在也能够将对象的属性连接为字符串。
- 内部 eval 上下文现在具有对环境的引用。
- 添加了映射测试,以查看对象是 dict 还是具有类似接口的对象。
版本 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 调用。
- 在 newstyle gettext 中将变量
num
用于复数计数以外的其他内容将不再引发KeyError
。 - 删除了内置标记类并切换到标记安全。 为了向后兼容,纯 Python 实现仍然存在,但由 Jinja 开发人员从 markupsafe 中提取出来。 调试支持进入一个名为“debugsupport”的单独功能,默认情况下被禁用,因为它只与 Python 2.4 相关
- 修复了具有错误优先级的一元运算符的问题。
版本 2.5
2010-05-29 发布,代号不连贯
- 通过添加对不区分大小写的搜索的支持,改进了排序过滤器(应该已经这样工作了很长时间)。
- 修复了 getattribute 常量折叠的错误。
- 支持新式 gettext 翻译,从而产生更好的模板内用户界面和更一致的目录。
- 现在可以在创建环境后注册扩展。
版本 2.4.1
发布 2010-04-20
- 修复了未定义的错误报告错误。
版本 2.4
2010-04-13 发布,代号相关
- 如果模板对象被传递给它,环境模板加载函数现在透明地传递它。 这使得从传递给模板的模板对象导入或扩展成为可能。
- 添加了可以从预编译源加载模板的
ModuleLoader
。 该环境现在具有将模板从配置的加载器编译到 zip 文件或文件夹的方法。 - _speedups C 扩展现在支持 Python 3。
- 添加了对自动转义切换部分的支持和对评估上下文的支持。
- 扩展现在有优先权。
版本 2.3.1
发布 2010-02-19
- 修复了所有 python 版本的错误报告错误
- 修复了 Python 2.4 上的错误报告错误
版本 2.3
2010 年 2 月 10 日发布,代号 3000 Pythons
- 修复了代码生成器的问题,如果在 if 块和其他小标识符问题中使用 set,则会导致生成未绑定变量。
- 如果提供了模板列表,包含标签现在可以在多个模板之间进行选择并采用第一个存在的模板。
- 修复了在外部作用域中具有调用块的问题,该调用块的参数也用作内部框架中的局部变量 :issue:`360`。
- 大大改进了错误消息报告 :pr:`339`
- 隐式元组表达式不能再完全为空。 此更改现在使
{% if %}
成为语法错误。 :问题:`364` - 如果通过 babel 提取,添加了对翻译评论的支持。
- 添加了 with 语句扩展。
- 实验性 Python 3 支持。
版本 2.2.1
发布 2009-09-14
- 修复了 Jython 上 Jinja 的一些小问题。
版本 2.2
2009-09-13 发布,代号 Kong
- 现在可以用
ignore missing
标记包含语句以跳过不存在的模板。 not
的优先级提高。 现在可以像在 python 中一样将not foo in bar
写为foo not in bar
的别名。 以前语法需要括号 (not (foo in bar)
),这很奇怪。- 修复了在定义宏或在循环内使用
{% call %}
标签时导致语法错误的错误。 - 修复了解析器中导致
{{ foo[1, 2] }}
不可能的错误。 - 可以在调用者框架中未使用的包含模板中引用外部作用域的名称 :issue:`327`
- 修复了一个错误,如果名称用作迭代变量和常规变量 after 循环,如果该变量未使用 before 循环,则会导致内部错误。 :pr:`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
,但适用于任意序列。 - 修复了宏中空语句的错误。
- 实现了字节码缓存系统。
- 模板上下文现在是弱引用
- 包含和导入“带有上下文”现在转发所有变量,而不仅仅是初始上下文。
- 添加了一个名为
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 首次发布。