Jinja更新日志

版本2.11

未发布的

  • 异步支持只在第一次加载 Environment 启用它,以避免缓慢的初始导入。 (#765)

  • 不再支持python 2.6和3.3。

  • 这个 map 异步模式下的过滤器现在自动等待

版本2.10

2017年11月8日发布

  • 添加了一个名为 OverlayScope 它可以用于创建一个未优化的范围,该范围将从派生上下文中查找所有变量。

  • 增加了一个 in 像in操作符一样工作的测试。这可以与 rejectselect .

  • 补充 previtemnextitem 循环上下文,提供对循环中上一个/下一个项的访问。如果该项不存在,则该值未定义。

  • 补充 changed(*values) 循环上下文,提供一种简单的方法来检查自上次迭代(或者更确切地说,自上次方法调用以来)以来某个值是否发生了更改。

  • 增加了一个 namespace 创建特殊对象的函数,该对象允许使用 set 标签。这可用于跨范围传输数据,例如从循环体到循环后的代码。

  • 增加了一个 trimmed 修饰语 {{% trans %}} 去除换行符和周围空白。还添加了一个新策略,以便为所有人启用此策略 trans 阻碍。

  • 这个 random 过滤器不再是错误的常数折叠,每次呈现模板时都会生成一个新的随机选择。 (#478)

  • 增加了一个 unique 过滤器。 (#469)

  • 补充 minmax 过滤器。 (#475)

  • 为所有比较运算符添加了测试: eqneltlegtge . (#665)

  • import 语句不能以尾随逗号结尾。 (#617, #618

  • indent 默认情况下,筛选器不会缩进空行。 (#685)

  • 添加 reverse 的参数 dictsort 过滤器。 (#692)

  • 添加 NativeEnvironment 它将模板呈现为本机python类型而不是字符串。 (#708)

  • 向块添加了筛选器支持 set 标签。 (#489)

  • tojson 过滤器将输出标记为安全的,以匹配记录的行为。 (#718)

  • 解决了一个错误,在该错误中,获取用于跟踪的调试局部变量可以修改模板上下文。

  • 修复了一个有很多 {{% elif ... %}} 块导致“缩进级别太多”错误。这些块现在编译为本机 elif ..: 而不是 else: if ..: (#759)

2.2.6版

(bugfix版本,2017年4月3日发布)

  • 修复了快速解析模式下的自定义上下文行为(675)

2.5.5版

(Bugfix版本,2017年1月28日发布)

  • 恢复了内部的原始报告 _GroupTuple 因为这导致了问题的答案,这是一个意想不到的变化。(654)

  • 添加了对重写旧上下文的自定义上下文的向后支持 resolve 方法:由于人们很难发现这可能导致回归。

  • 正确使用for循环的else块的缓冲区。这导致了2.x上的无效语法错误和python 3上的完全错误行为(669)

  • 解决以下问题: {{% extends %}} 标记不能用于异步环境。(668)

  • 通过减少我们在python 3上用于标识符匹配的unicode数据库转储,稍微减少内存占用量(666)

  • 修正了在异步编译模式下自动转义不适用于宏的问题。(671)

2.9.4版

(Bugfix版本,2017年1月10日发布)

  • 解决了字符串文本的一些警告。(646)

  • 增加字节码缓存版本,因为之前的疏忽而没有完成。

  • 修正了错误的代码生成和过滤循环的作用域。(649)

  • 解决了这样一个问题:当if语句中包含块时,已知扩展块之后的顶级输出静默可能会生成无效代码。(651)

  • 制成 truncate.leeway 默认配置可提高与旧模板的兼容性。

2.2.3版

(Bugfix版本,2017年1月8日发布)

  • 已将宏中块的使用还原为以前可能的扩展。在Python3上,它将呈现一个生成器repr而不是块内容。(645)

  • 当变量也从外部作用域读取时,为内部作用域中的变量分配设置一致的行为。现在,它在所有情况下都设置了预期的行为,但是它不会在可能对外部作用域进行有限分配的情况下恢复旧的行为。有关更多信息和讨论,请参见641

  • 解决了一个问题 block scoped 不会利用新的范围界定规则。在一些更奇特的情况下,局部作用域中重写的变量不会使其成为块。

  • 更改的代码生成 with 语句要符合新的作用域规则。这解决了边缘情况下一些不太可能出现的错误。这也引入了一个新的内部 With 可由扩展使用的节点。

2.2.2版

(Bugfix版本,2017年1月8日发布)

  • 修正了导致循环不能对目标和源迭代器使用相同变量的回归。(640)

  • 添加对以前未知的宏行为的支持。在某些情况下,可以显式地为宏提供调用方参数。虽然这是一个很严重的错误和意想不到的结果,这是一个常见的情况,得到复制粘贴周围。为了不完全破坏与最常见情况的向后兼容性,现在可以为调用者提供一个显式的关键字参数(如果给定了显式的默认值)。(642)

2.2.1版

(Bugfix版本,2017年1月7日发布)

  • 解决了宏的调用块范围的回归问题。使用与外部宏相同标识符的嵌套调用程序块可能会错误地引用错误的变量。

版本2.9

(代号推导,2017年1月7日发布)

  • 更改环境中的缓存键定义。这修复了2.8中引入的性能回归。

  • 为添加了支持 generator_stop 在受支持的python版本(python 3.5及更高版本)上

  • 修正了一个长期存在的问题,即数学运算的运算符优先级与预期不符。

  • 通过新的异步模式增加了对python 3.6异步迭代器的支持。

  • 添加了过滤默认值和类似内容的策略。

  • 现在,URLIZE默认设置为“rel noopener”。

  • 支持2.x中旧样式类的属性回退。

  • 在扩展情况下支持顶级集合语句。

  • 已恢复python 3用户的cycler行为。

  • 现在减法与其他未定义值的运算符的行为相同。

  • map 如果你忘记引用参数,朋友们会给出更好的错误信息。

  • 取决于MarkupSafe 0.23或更高。

  • 改进了 truncate 过滤以支持更好的截断,以防字符串几乎没有被截断。

  • 将宏自动转义的逻辑更改为基于调用时的运行时自动转义信息,而不是宏定义时间。

  • 移植了 tojson 从烧瓶过滤到jinja2,并将其与新的政策框架连接起来。

  • 块集现在已标记 safe 默认情况下。

  • 在python 2上,现在可以使用 compiler.ascii_str 政策。

  • 测试现在不再接受任意表达式作为第一个参数,而是接受一个受限制的参数。这意味着您现在可以在一个表达式中正确地使用多个测试,而不需要额外的括号。尤其是你现在可以写 foo is divisibleby 2 or foo is divisibleby 3 如你所料。

  • 很大程度上改变了范围界定系统,使其更符合模板设计者和开发人员的期望。现在,不同的include和import构造之间不再有魔力差异。上下文现在总是以相同的方式传播。唯一剩下的差异是 with contextwithout context .

  • 这个 withautoescape 标签现在是内置的。

  • 添加新的 select_autoescape 功能,帮助配置更好的自动转义更容易。

  • 修复了访问异步生成器属性时沙盒中的运行时错误。

2.2.1版

(Bugfix版本,2016年12月29日发布)

  • 修正了 for_qsurlencode .

  • 应用时固定回归 int 到非字符串值。

  • 安全性:如果使用沙盒模式,则格式表达式现在与jinja中的规则相同。这解决了格式字符串可能出现的各种信息泄漏问题。

版本2.8

(代号替换,2015年7月26日发布)

  • 补充 target 参数到URLIZE函数。

  • 为添加了支持 followsymlinks 到文件系统加载程序。

  • 截断过滤器现在计算长度。

  • 添加了EqualTo过滤器,有助于选择过滤器。

  • 更改了缓存键以使用绝对文件名(如果可用)而不是加载名。

  • 某些迭代器的固定循环长度计算。

  • 更改了在python 2中,jinja2如何将字符串强制为本机字符串,以便在人们破坏其默认编码时工作。

  • 补充 make_logging_undefined() 它返回一个未定义的对象,该对象将失败记录到记录器中。

  • 如果缓存数据的解组失败,模板将立即重新加载。

  • 实现了一个块 set 标签。

  • 默认缓存大小从低50增加到400。

  • 固定的 is number 测试以接受所有Python版本中的长整数。

  • 改变 is number 接受十进制数字。

  • 添加了对默认参数的检查,后跟非默认参数。这一变化使 {{% macro m(x, y=1, z) %}}...{{% endmacro %}} 语法错误。此代码以前的行为无论如何都被破坏(导致将默认值应用于 y

  • 添加使用自定义子类的功能 jinja2.compiler.CodeGeneratorjinja2.runtime.Context 通过向环境中添加两个新属性 (code_generator_classcontext_class (拉动请求) #404

  • 在环境的finalize回调中添加了对context/environment/evalctx decorator函数的支持。

  • 正确转义urlencode的查询字符串。以前的斜杠在那个地方没有逃过。

  • 将“base”参数添加到“int”筛选器。

2.7.3版

(Bugfix版本,2014年6月6日发布)

  • 安全问题:已更正缓存文件夹的安全修复。此修复程序由Redhat提供。

2.7.2版

(Bugfix版本,2014年1月10日发布)

  • 前缀加载程序未将本地变量正确转发到内部加载程序。现在已修复。

  • 安全问题:将文件系统缓存的默认文件夹更改为用户特定的文件夹,并在UNIX系统上进行读写保护。见 Debian bug 734747 更多信息。

2.7.1版

(Bugfix版本,2013年8月7日发布)

  • 修正了一个错误 call_filter 在环境和上下文筛选器上工作不正常。

  • 修复了对字节码缓存缺少python 3支持的问题。

  • 恢复了对在包含的模板中定义块的支持,因为这会破坏用户的现有模板。

  • 修正了一些关于未定义和节点散列的警告,如果运行python时出现python 3的警告。

  • 添加了对未定义对象正确散列的支持。

  • 修正了标题过滤器不能处理已经大写的字符串的错误。

版本2.7

(代号翻译,2013年5月20日发布)

  • Choice和Prefix加载器现在分别调度源和模板查找,以便与模块加载器结合使用,如广告所示。

  • 固定的文件大小格式。

  • 为babel提取添加了一个非静默选项。

  • 补充 urlencode 自动引用URL安全使用值的筛选器,仅支持UTF-8编码。如果应用程序要更改此编码,它们可以覆盖筛选器。

  • 补充 keep-trailing-newline 环境和模板的配置,以选择性地保留最后的尾随换行符。

  • 访问 last 在循环上下文中,不再将迭代器消耗到列表中。

  • python需求已更改:现在需要2.6、2.7或>=3.3,由相同的源代码支持,使用“six”兼容性库。

  • 允许 contextfunction 以及其他要应用于 __call__ .

  • 添加了对从换行改为 wordwrap 过滤器。

  • 添加了对自动忽略memcache错误的支持。

  • 添加了在模板中保留尾随新行的支持。

  • 为在块的左侧剥离空白添加了更细粒度的支持。

  • 补充 mapselectrejectselectattrrejectattr 过滤器。

  • 为添加了支持 loop.depth 为了弄清楚代码在递归循环中的深度。

  • 已禁用py py和python 3的py_编译。

版本2.6

(代号卷积,2011年7月24日发布)

  • 内部属性现在引发内部属性错误,而不是返回未定义的。这解决了将未定义的对象传递给需要API的Python语义时的问题。

  • 回溯支持现在对Pypy有效。(用1.4测试)

  • 实现了对沙盒环境的运算符截取。这允许应用程序开发人员禁用内置的运算符,以获得更好的安全性。(例如,将数学运算符限制为实际整数而不是长整数)

  • GroupBy过滤器现在支持按属性分组的点标记法。

  • 作用域块现在正确处理顶级分配和导入。以前,导入突然在一个范围块中“消失”。

  • 在从字节码缓存加载代码之前自动检测更新的python解释器版本,以防止无效操作码上的segfaults。这里的早期版本jinja2中的segfault不是jinja2 bug,而是底层python解释器中的一个限制。如果在升级python解释器之后发现早期版本中的jinja2 segfaulting不需要升级,那么就足以刷新字节码缓存。这就不再是必要的了,Jinja2现在将自动检测这些病例。

  • sum过滤器现在可以按属性汇总值。这是一个向后不相容的变化。以前过滤器的参数是可选的起始索引,默认为零。这现在成为了函数的第二个参数,因为它很少使用。

  • 和sum一样,sort现在也可以按属性排序。

  • 和sum和sort一样,join现在也能够以字符串形式连接对象的属性。

  • 内部eval上下文现在具有对环境的引用。

  • 添加了一个映射测试,以查看对象是dict还是具有类似接口的对象。

2.5.5版

(重新发布2.5.4版本,删除构建文档以进行文件化。

2010年10月18日发布)

  • 构建的文档不再是发布的一部分。

2.5.4版

(Bugfix版本,2010年10月17日发布)

  • 固定扩展未正确加载覆盖。

  • 在cpython中为调试器解决一个导致64位big-endian体系结构上出现SegFaults的错误。

2.5.3版

(Bugfix版本,2010年10月17日发布)

  • 修正了2.5.2中引入的运算符优先级错误。像“-foo.bar”这样的语句在表达式的第一部分(“(-foo.bar”)周围应用了隐式括号,而不是更正确的“-(foo.bar)”。

2.5.2版

(Bugfix版本,2010年8月18日发布)

  • 改进了setup.py脚本,以便更好地处理人们可能仍然使用的假设。 (--with-speedups

  • 修复了排除新调试支持的打包错误。

2.5.1版

(Bugfix版本,2010年8月17日发布)

  • 从模板调用的函数引发的StopIteration异常现在被截获并转换为未定义的异常。这就解决了许多调试的麻烦。(StopIteration在内部用于中止模板执行)

  • 稍微提高了宏调用的性能。

  • Babel提取现在可以正确提取NewStyle GetText调用。

  • 使用变量 num 在newStyle getText中,除了复数形式之外,计数将不再增加 KeyError .

  • 删除了内置标记类并切换到MarkupSafe。为了向后兼容,纯Python实现仍然存在,但由Jinja2开发人员从MarkupSafe中提取。调试支持进入了一个称为“debug support”的单独功能,并在默认情况下被禁用,因为它只与Python2.4相关。

  • 修复了一元运算符优先级错误的问题。

版本2.5

(代号不一致,2010年5月29日发布)

  • 通过添加对不区分大小写搜索的支持,改进了排序过滤器(应该已经这样工作了很长时间)。

  • 修正了getattribute常量折叠的错误。

  • 支持NewStyle GetText翻译,这样可以在模板用户界面和更一致的目录中产生更好的效果。 (空白剪裁

  • 现在可以在创建环境后注册扩展。

2.4.1版

(Bugfix版本,2010年4月20日发布)

  • 修复了未定义的错误报告错误。

版本2.4

(代号相关性,2010年4月13日发布)

  • 环境模板加载函数现在透明地传递模板对象(如果传递给它)。这使得可以从传递给模板的模板对象导入或扩展。

  • 增加了一个 ModuleLoader 可以从预编译源加载模板。环境现在提供了一种方法,可以将模板从配置的加载程序编译到zip文件或文件夹中。

  • u speedups c扩展现在支持python 3。

  • 添加了对自动转义切换节的支持和对评估上下文的支持 (评估背景

  • 扩展现在具有优先权。

2.3.1版

(Bugfix版本,2010年2月19日发布)

  • 修复了所有python版本上的错误报告错误

  • 修复了python 2.4上的错误报告错误

版本2.3

(代号3000 Python ,2010年2月10日发布)

  • 修复了在if块和其他小标识符问题中使用set时导致生成未绑定变量的代码生成器问题。

  • 如果给定了模板列表,那么include标记现在可以在多个模板之间进行选择,并取第一个存在的模板。

  • 修正了在外部作用域中有一个调用块的问题,该调用块的参数在内部框架(360)中也被用作局部变量。

  • 大大改进了错误消息报告(339)

  • 隐式元组表达式不能再完全为空。这一变化使 {{% if %}}...{{% endif %}} 语法错误。(364)

  • 如果通过babel提取,则添加了对翻译注释的支持。

  • 添加了语句扩展名。

  • 实验性的python 3支持。

2.2.1版

(Bugfix版本,2009年9月14日发布)

  • 修复了Jython上的jinja2的一些小问题。

版本2.2

(代号孔,2009年9月13日发布)

  • 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版本

(Bugfix版本,2008年12月25日发布)

  • 修复了在空递归循环上循环导致的转换错误。

版本2.1

代号Yasuz_,2008年11月23日发布)

  • 修复了一个包含嵌套循环和特殊循环变量的错误。在更改之前,内部循环在迭代之后覆盖外部循环变量。

  • 修正了I18N扩展名导致显式复数块查找错误变量的错误。

  • 修正了lexer中的限制 {{{{ foo.0.0 }}}} 不可能的。

  • 对具有常量值的变量的基于索引的订阅现在返回未定义的对象,而不是引发索引错误。这是一个由急于优化引起的错误。

  • I18N分机查找 foo.ugettext 现在紧随其后 foo.gettext 如果安装了翻译对象。这使得处理自定义翻译类更加容易。

  • 修正了带有条件扩展的混淆行为。循环在某些条件下部分执行,即使它们不是可见区域的一部分。

  • 补充 sort 像这样工作的过滤器 dictsort 但对于任意序列。

  • 修复了宏中包含空语句的错误。

  • 实现了字节码缓存系统。 (字节码缓存

  • 模板上下文现在是脆弱的

  • inclusions和imports“with context”现在转发所有变量,而不仅仅是初始上下文。

  • 添加了一个名为 cycler .

  • 添加了一个名为 joiner .

  • 增加了一个 compile_expression 方法编译为可调用的python对象。

  • 修复了URLIZE中的转义错误

版本2

(代号:Jinjavitus,2008年7月17日发布)

  • 对象的订阅(查找属性和项)从略微改变。现在可以通过使用点标记查找或括号语法赋予属性或项更高的优先级。这也稍微改变了AST。 Subscript 已经不见了,取而代之的是 GetitemGetattr .

    有关详细信息,请参阅 the implementation details .

  • 增加了对扩展的预处理和令牌流过滤的支持。这将允许扩展允许在模板数据中进行简化的gettext调用以及类似的操作。

  • 补充 jinja2.environment.TemplateStream.dump() .

  • 添加了对隐式字符串文字串联的缺少支持。 {{{{ "foo" "bar" }}}} 等于 {{{{ "foobar" }}}}

  • else 对于条件表达式是可选的。如果没有给出,则评估为 false .

  • 通过提供位置改进了未定义值的错误报告。

  • filesizeformat 过滤器现在默认使用十进制前缀,可以用第二个参数设置为二进制模式。

  • 已修复终结器中的错误

2.0RC1版本

(无代号,2008年6月9日发布)

  • Jinja2首次发布