Changelog¶
3.0.0版¶
未发布的
放弃对Python2.7和3.5的支持。
将MarkupSafe依赖项凹凸到>=1.1。
将Babel可选依赖项提升到>=2.1。
删除标记为已弃用的代码。
使用 PEP 451 用于加载模板的API
PackageLoader
. #1168修复导致导入的宏无法访问当前模板的全局参数的错误。 #688
添加忽略功能
trim_blocks
使用+%}}
. #1036修复了一个错误,该错误导致自定义的仅异步过滤器在常量输入时失败。 #1279
修复在未定义的变量上错误地引发未定义错误,而不是
Undefined
被退回的日期为NativeEnvironment
在Python 3.10上。 #1335添加
required
属性添加到必须在某个点重写但不一定由直接子级重写的块 #1147不推荐使用
autoescape
和with
扩展部分 #1203
版本2.11.2¶
发布日期:2020-04-13
修复导致可调用对象的错误
__getattr__
,像Mock
被视为contextfunction()
. #1145修复在python32位上显示回溯时的挂起。 #1162
显示引发的对象的未定义错误
AttributeError
on access不会导致递归错误。 #1177将更改还原为
PackageLoader
从命名空间中删除了对setup2.10的依赖性和对pkg.10包的依赖性。这些更改在使用Pytest时引发了问题。因为在支持python2和 PEP 451 同时,更改将恢复到3.0。 #1182修复删除新行时错误消息中的行号。 #1178
特殊
namespace()
模板中的赋值对象在异步环境中工作。 #1180在修复中间标记之前删除空白行时
lstrip_blocks
启用。 #1138NativeEnvironment
doesn't evaluate intermediate strings during rendering. This prevents early evaluation which could change the value of an expression. #1186
版本11¶
发布日期:2020-01-27
放弃对Python2.6、3.3和3.4的支持。这将是支持Python2.7和3.5的最新版本。
增加了一个新的
ChainableUndefined
类来支持未定义对象上的getitem和getattr。 #977允许
{{%+
语法(使用NOP行为)当lstrip_blocks
已禁用。 #748增加了一个
default
的参数map
过滤器。 #557从中排除环境全局参数
meta.find_undeclared_variables()
. #931Int和float字面值可以用''uu'分隔符来编写,以确保易读性,如12_345。 #923
修复导致死锁的错误
LRUCache.setdefault
. #1000这个
trim
filter接受一个可选的字符串来修剪。 #828一个新的
jinja2.ext.debug
扩展名添加{{% debug %}}
标记以快速转储当前上下文和可用的筛选器和测试。 #174 , #798, #983添加新
boolean
,false
,true
,integer
和float
测验。 #824环境就是环境
finalize
函数只应用于表达式的输出(常量或非常量),而不是静态模板数据。 #63当提供多个路径到
FileSystemLoader
,模板可以与目录同名。 #821总是返回
Undefined
当省略else
A中的子句{{{{ '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在异步环境中
loop
属性length
和revindex
为异步迭代器工作。 #1101如果需要从属性awaited/attribute属性中访问属性,则将从异步环境中获取。 #1101
PackageLoader
doesn't depend on setuptools or pkg_resources. #970PackageLoader
has limited support for PEP 420 namespace packages. #1097支持
os.PathLike
中的对象FileSystemLoader
和ModuleLoader
. #870NativeTemplate
correctly handles quotes between expressions."'{{ a }}', '{{ b }}'"
renders as the tuple('1', '2')
rather than the string'1, 2'
. #1020创建一个
NativeTemplate
直接创建NativeEnvironment
而不是违约Environment
. #1091打电话后
LRUCache.copy()
,副本的队列方法指向正确的队列。 #843编译模板时总是写入UTF-8,而不是默认为系统编码。 #889
|wordwrap
filter treats existing newlines as separate paragraphs to be wrapped individually, rather than creating short intermediate lines. #175添加
break_on_hyphens
参数到|wordwrap
过滤器。 #550Cython编译的修饰为上下文函数的函数将被传递给上下文。 #1108
当在编译时计算常量的链式比较时,结果遵循Python返回的行为
False
如果有任何比较返回False
而不是最后一个。 #1102模板中异常的回溯显示Python>=3.7的正确行号和源代码。 #1104
python3中模板语法错误的回溯不再显示内部编译器框架。 #763
添加
DerivedContextReference
节点,扩展可以使用它来获取当前上下文和局部变量,例如loop
. #860编译期间的常量折叠应用于以前忽略的某些节点类型。 #733
TemplateSyntaxError.source
is not empty when raised from an included template. #457路过
Undefined
价值到get_template
(例如通过extends
,import
或include
),引发一个UndefinedError
一贯地。select_template
将在尝试列表中显示未定义的消息,而不是空字符串。 #1037TemplateSyntaxError
can be pickled. #1117
版本2.10.2¶
发布日期:2019-10-04
版本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
过滤器不再是错误的常数折叠,每次呈现模板时都会生成一个新的随机选择。 #478增加了一个
unique
过滤器。 #469补充
min
和max
过滤器。 #475为所有比较运算符添加了测试:
eq
,ne
,lt
,le
,gt
,ge
. #665import
statement cannot end with a trailing comma. #617, #618indent
filter will not indent blank lines by default. #685添加
reverse
的参数dictsort
过滤器。 #692添加
NativeEnvironment
它将模板呈现为本机python类型而不是字符串。 #708向块添加了筛选器支持
set
标签。 #489tojson
filter marks output as safe to match documented behavior. #718解决了一个错误,在该错误中,获取用于跟踪的调试局部变量可以修改模板上下文。
修复了一个有很多
{{% elif ... %}}
块导致“缩进级别太多”错误。这些块现在编译为本机elif ..:
而不是else: if ..:
#759
2.5.5版¶
发布日期:2017-01-28
2.9.4版¶
发布日期:2017-01-10
2.2.3版¶
发布日期:2017-01-08
2.2.2版¶
发布日期:2017-01-08
版本2.9¶
2017-01-07发布,代号衍生
更改环境中的缓存键定义。这修复了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
从Flask到Jinja进行过滤,并将其与新的政策框架连接起来。块集现在已标记
safe
默认情况下。在python 2上,现在可以使用
compiler.ascii_str
政策。测试现在不再接受任意表达式作为第一个参数,而是一个受限制的参数。这意味着您现在可以在一个表达式中正确使用多个测试,而不需要额外的括号。特别是你现在可以写作了
foo is divisibleby 2 or foo is divisibleby 3
如你所料。极大地改变了范围界定系统,使其更符合模板设计者和开发人员的期望。现在不同的include和import构造之间不再有什么神奇的区别了。上下文现在总是以相同的方式传播。唯一剩下的区别是
with context
和without context
.这个
with
和autoescape
标签现在是内置的。添加新的
select_autoescape
功能,帮助配置更好的自动转义更容易。修复了访问异步生成器属性时沙盒中的运行时错误。
2.2.1版¶
发布日期:2016-12-29
修正了
for_qs
旗urlencode
.应用时固定回归
int
到非字符串值。安全性:如果使用沙盒模式,则格式表达式现在使用与Jinja中相同的规则进行沙盒处理。这解决了格式字符串可能出现的各种信息泄漏问题。
版本2.8¶
发布日期:2015-07-26,代号替换
补充
target
参数到URLIZE函数。为添加了支持
followsymlinks
到文件系统加载程序。截断过滤器现在计算长度。
添加了EqualTo过滤器,有助于选择过滤器。
更改了缓存键以使用绝对文件名(如果可用)而不是加载名。
某些迭代器的固定循环长度计算。
将Python字符串改为本地字符串时如何在Python中强制使用Jinja编码。
补充
make_logging_undefined
它返回一个未定义的对象,该对象将失败记录到记录器中。如果缓存数据的解组失败,模板将立即重新加载。
实现了一个块
set
标签。默认缓存大小从低50增加到400。
固定的
is number
测试以接受所有Python版本中的长整数。改变
is number
接受十进制数字。添加了对默认参数的检查,后跟非默认参数。这一变化使
{{% macro m(x, y=1, z) %}}
语法错误。此代码以前的行为无论如何都被破坏(导致将默认值应用于y
)添加使用自定义子类的功能
jinja2.compiler.CodeGenerator
和jinja2.runtime.Context
通过向环境中添加两个新属性 (code_generator_class
和context_class
) #404在环境的finalize回调中添加了对context/environment/evalctx decorator函数的支持。
正确转义urlencode的查询字符串。以前在那个地方砍伤是没有逃过的。
将“base”参数添加到“int”筛选器。
2.7.2版¶
发布日期:2014-01-10
前缀加载器未将局部变量正确转发给内部加载程序。现在已经修复了。
安全问题:将文件系统缓存的默认文件夹更改为特定于用户的,并且在UNIX系统上具有读写保护。看到了吗 Debian bug 734747 更多信息。
2.7.1版¶
发布日期:2013-08-07
修正了一个错误
call_filter
在环境和上下文筛选器上工作不正常。修复了对字节码缓存缺少python 3支持的问题。
恢复了对在包含的模板中定义块的支持,因为这会破坏用户的现有模板。
修正了一些关于未定义和节点散列的警告,如果运行python时出现python 3的警告。
添加了对未定义对象正确散列的支持。
修正了标题过滤器不能处理已经大写的字符串的错误。
版本2.7¶
2013-05-20发布,代号翻译
Choice和Prefix加载器现在分别调度源和模板查找,以便与模块加载器结合使用,如广告所示。
固定的文件大小格式。
为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 py和python 3的py_编译。
版本2.6¶
发布日期:2011-07-24,代号:卷积
内部属性现在引发一个内部属性错误,而不是返回一个未定义的。这修复了将未定义的对象传递给Python语义(需要api)时的问题。
回溯支持现在可以对PyPy正常工作了。(用1.4测试)
为沙盒环境实现了操作员拦截。这允许应用程序开发人员禁用内置运算符以获得更好的安全性。(例如,将数学运算符限制为实际整数而不是long)
Groupby过滤器现在支持按属性的属性分组的点式表示法。
作用域块现在可以正确处理顶级赋值和导入。以前,导入突然“消失”在作用域块中。
在从字节码缓存加载代码之前自动检测较新的Python解释器版本,以防止无效操作码上出现段错误。早期的Jinja版本中的segfault不是Jinja错误,而是底层Python解释器中的一个限制。如果在升级Python解释器之后注意到早期版本中的Jinja segfaulting,那么就足以刷新字节码缓存了。这就不再有必要了,Jinja现在会自动检测到这些情况。
sum过滤器现在可以按属性汇总值。这是一个向后不兼容的变化。前面过滤器的参数是可选的起始索引,默认为零。这现在成为函数的第二个参数,因为它很少使用。
与sum一样,sort now还可以按属性对项目排序。
和sum和sort一样,join now也可以将对象的属性作为字符串连接起来。
内部评估上下文现在有了对环境的引用。
添加了一个映射测试,以查看对象是dict还是具有类似接口的对象。
2.5.3版¶
发布日期:2010-10-17
修正了2.5.2中引入的运算符优先级错误。类似“的陈述”-美食酒吧“在表达式的第一部分((-foo.bar”)周围应用了隐式括号,而不是更正确的部分”-(美食酒吧)".
2.5.1版¶
发布日期:2010-08-17
从模板调用的函数引发的StopIteration异常现在被截获并转换为未定义的。这解决了很多调试的麻烦。(StopIteration在内部用于中止模板执行)
稍微提高了宏调用的性能。
Babel提取现在可以正确提取newstyle gettext调用。
使用变量
num
在newStyle getText中,除了复数形式之外,计数将不再增加KeyError
.删除了内置标记类并切换到markupsafe。为了向后兼容,纯Python实现仍然存在,但是由Jinja开发人员从markupsafe中提取出来。调试支持包含在一个名为“debugsupport”的单独特性中,并且在默认情况下被禁用,因为它只与python2.4相关
修正了一元运算符优先级错误的问题。
版本2.5¶
发布日期:2010-05-29,代号不一致
通过添加对不区分大小写的搜索的支持,改进了排序过滤器(长期以来应该是这样工作的)。
修正了getattribute常量折叠的错误。
支持newstyle gettext翻译,这会产生更好的模板内用户界面和更一致的目录。
现在可以在创建环境后注册扩展。
版本2.4¶
2010年4月13日发布,代号相关性
环境模板加载函数现在透明地通过模板对象传递给它。这使得可以从传递给模板的模板对象导入或扩展。
增加了一个
ModuleLoader
它可以从预编译源加载模板。该环境现在提供了一种方法,可以将配置好的加载程序中的模板编译到zip文件或文件夹中。u speedups C扩展现在支持python3。
增加了对自动转义切换部分的支持和对求值上下文的支持。
扩展现在有了优先权。
版本2.3¶
2010年2月10日发布,代号3000条 Python
版本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¶
发布于2008年11月23日,代号Yasuzō
并用一个特殊的循环嵌套了一个错误。在更改之前,一个内部循环在迭代后从外部循环重写循环变量。
修正了i18n扩展导致显式复数块查找错误变量的错误。
修正了lexer的一个限制
{{{{ foo.0.0 }}}}
不可能的。使用常量值对变量进行基于索引的订阅现在将返回未定义的对象,而不是引发索引错误。这是一个由急切的优化引起的错误。
i18n扩展查找
foo.ugettext
现在紧随其后foo.gettext
如果安装了翻译对象。这使得处理自定义翻译类更容易。修正了有条件扩展的混乱行为。在某些情况下,循环被部分执行,即使它们不是可见区域的一部分。
补充
sort
像这样工作的过滤器dictsort
但对于任意序列。修正了宏中空语句的错误。
实现了字节码缓存系统。
模板上下文现在是可扩展的
inclusion和imports“with context”现在转发所有变量,而不仅仅是初始上下文。
添加了一个称为
cycler
.添加了一个名为
joiner
.增加了一个
compile_expression
方法编译为可调用的python对象。修正了urlize中的一个转义错误
版本2¶
发布于2008-07-17,代号Jinjavitus
对象的订阅(查找属性和项)从稍有变化。现在可以通过使用点符号查找或括号语法赋予属性或项更高的优先级。这也稍微改变了AST。
Subscript
已经不见了,取而代之的是Getitem
和Getattr
.增加了对扩展的预处理和令牌流过滤的支持。这将允许扩展允许在模板数据和类似内容中简化gettext调用。
补充
TemplateStream.dump
.添加了对隐式字符串文本连接缺少的支持。
{{{{ "foo" "bar" }}}}
等于{{{{ "foobar" }}}}
else
对于条件表达式是可选的。如果未给出,则计算为false
.通过提供位置来改进未定义值的错误报告。
filesizeformat
过滤器现在默认使用十进制前缀,可以用第二个参数设置为二进制模式。修正了终结器中的错误