跳转到主要内容

快速HTML/XML模板编译器。

项目描述

Chameleon

PyPI - Python Version GitHub Actions Workflow Status

Chameleon 是一个用于 Python 的 HTML/XML 模板引擎。它使用 页面模板 语言。

您可以在任何 Python 应用程序中使用它,几乎兼容任何版本的 Python(3.9+ 及更高版本,以及 pypy 3)。

访问 文档 了解更多信息。

注意

变更

4.5.4 (2024-04-08)

  • 修复了一个问题,当多个符号相邻出现时,$-符号的转义不会正确工作。(#422

4.5.3 (2024-04-05)

  • 在渲染具有静态消息 ID 的翻译时进行了一些小的优化(不需要测试它是否为空)。

  • 修复了一个问题,无法正确使用宏来渲染翻译名称。(#419

4.5.2 (2024-01-29)

  • 修复了一个回归问题,其中静态符号不会正确导入。(#414

4.5.1 (2024-01-28)

  • 添加 Python 3.13 分类器。

  • 修复了一个回归问题,其中在 PageTemplateLoader 中不再允许使用 default_extension 作为位置参数。(#411

4.5.0 (2024-01-18)

  • Chameleon 现在具有类型注解!

  • 不再允许在模板中作为变量使用的名称列表(如“int”和“float”)已经显著缩减,不是因为使用这样的名称是个好主意,而是因为不允许的名称列表并不完整,这使编译器代码复杂化;更重要的是,最初不允许使用这些名称的技术原因不再适用。

  • 修复了一个回归问题,由于对内部变量的错误处理,生成的模板代码效率不高。

  • 即使在使用 CHAMELEON_CACHE 选项将生成的代码持久化到磁盘的情况下,也会始终在调试模式下编译模板。

  • 将 AST 重新解析为 Python 代码现在使用内置的 ast.unparse 函数。此更改不会直接体现出来,但意味着反解析代码现在能更正确地跟踪解释器的更改。

  • 取消对 AST 节点不是 weakref 可用平台(例如,较旧的 PyPy)的支持。

4.4.4 (2024-01-18)

  • 修复了一个 PyPy 兼容性问题,该问题与确定某些包(例如 cffi)不包含版本号时的版本集有关。

4.4.3 (2023-12-30)

  • 移除 zope.interface

  • 修复了一个问题,当 auto_reload 被启用并且从未压缩的包中加载文件时。(#402

4.4.2 (2023-12-18)

  • 修复了棕色袋发布。

4.4.1 (2023-12-18)

  • 修复了棕色袋发布。

4.4.0 (2023-12-12)

  • 添加了可选参数 package_name,允许相对包加载模板。

  • 取消对 Python 3.7 的支持。

  • 修复了 Chameleon 在 Windows 上无法正确加载模板的回归问题。

  • 修复了 importlib_resourcesimportlib_metadata 的依赖项名称。(#394

4.3.0 (2023-12-04)

  • 本地变量作用域现在是可迭代的,完成字典接口。(#390

  • 对渲染逻辑进行了小的优化。

  • 隐式翻译现在为翻译函数提供翻译上下文、域和目标语言(如果适用)。以前,提供了目标语言,但不尊重通过 i18n:target 的更改。(#369

  • pkg_resources 替换为更新且更快的 importlib.resourcesimportlib.metadata。随着安装的包越来越多,仅导入 pkg_resources 的速度会越来越慢。

4.2.0 (2023-09-25)

  • 现在,作为字符串提供的 XML 文档(即解码的)内容编码现在可以正确解析。

  • 现在,在非 XML 模式下,布尔属性将自动配置到模板中,假设我们正在用来生成 HTML。

    这意味着可以同时使用 XML 和 HTML 基础模板的相同加载机制。

4.1.0 (2023-08-29)

  • 布尔属性(使用可选的 boolean_attributes 参数配置的)现在可以与 $-表达式插值一起使用。

    与内容和常规属性不同,现在对布尔属性进行了特殊的假值检查,以便可以在插值表达式中使用布尔逻辑(只有真值将包括属性)。

    这恢复了 3.8.0 中引入的行为变更。

    此外,动态属性现在也尊重布尔属性配置。

4.0.1 (2023-06-19)

  • 修复了 f-strings 上的格式规范应用问题。(#376

4.0.0 (2023-03-06)

  • 停止支持 Python 2.7、3.5、3.6。

  • 添加了对集合和字典推导式的支持(#367

  • 删除以下函数或模块

    • .utils.text_()

    • .utils.unescape()

    • .compat

3.10.2 (2022-12-16)

  • 修复了使用子类化进行积极编译(例如,Pyramid 集成)的处理。

3.10.1 (2022-05-17)

  • 修复了 chameleon.exc.TemplateError 的 __str__ 方法(#356

3.10.0 (2022-04-06)

  • 使作用域类字典-like(#305

  • 在 FIPS 启用环境中工作(#345

  • 修复了制表符处理问题(#350

3.9.1 (2021-05-14)

  • 避免各种跟踪回溯引用循环。

3.9.0 (2021-02-26)

  • 删除了不支持 Python 版本的兼容性代码

  • 停止支持过时的 Python 3.4

  • 修复了在相同的 tal:define 中重新定义变量时的命名空间处理问题(#237

  • 修复了如果 template.filename 为 None 时计算模板摘要失败的问题(#254

3.8.1 (2020-07-06)

  • 添加了代码优化,以减少静态文本的连续追加。

  • 动态属性中的 default 符号现在是符号的。之前,它被分配给默认属性文本的字符串值。对于 switch/case 表达式也进行了类似更改。

  • 静态元素属性的内置 attrs 字典现在可以正确地与 tal:define 等一起工作。

  • 修复了在 Python 3.9 上的切片代码生成兼容性问题。

3.8.0 (2020-06-25)

  • 将默认标记作为可导入符号 chameleon.tales.DEFAULT_MARKER 公开。

  • 删除了遗留标志 literal_false。要获取类似的行为,请使用 boolean_attributes

3.7.4 (2020-06-17)

  • 修复了 brown-bag 发布。

3.7.3 (2020-06-17)

  • 修复了在 3.6.2 中引入的回归,其中默认标记会在模板之间错误地更改其值,导致依赖于将值作为全局对象处理的软件出现问题。

3.7.2 (2020-05-31)

  • 允许设置自定义值表示函数,允许在异常格式化期间自定义变量的格式。

3.7.1 (2020-05-10)

  • 修复了与 Python 3.9 的兼容性问题。

3.7.0 (2020-03-26)

  • 修复了变量作用域对象(问题 #301)的垃圾收集问题。

  • 修复了设置全局变量时在本地不可用的问题。

  • RepeatDict 不再从 dict 继承,因为它实际上并没有以有意义的方式提供该接口。

  • 添加了功能门 enable_comment_interpolation,用于控制是否在 HTML 注释内部启用表达式插值(默认为启用)。

  • 添加了对 Python 3.6+ f-strings 的支持(问题 #294)。

3.6.2 (2019-06-22)

3.6.1 (2019-04-01)

  • 修复 HTML 注释中非法的双连字符搜索表达式问题,以解决 issue #289。

3.6 (2019-02-19)

  • 在异常包装中排除 RuntimeError(或当可用时 RecursionError)。

  • 修复双美元符号 ‘$$’ 转义问题,使得双美元符号始终解析为插值表达式,或者在转义时替换为单个美元符号。现在这与 Zope 处理该字符的方式一致。

    不再支持基于美元的字符串插值的反斜杠转义。文档已更新以反映这一变化。

    此修复解决了 issue #283。请注意,这会撤销解决 issue #265 时引入的一些更改。

  • 取消对 Python 3.3 的支持。

3.5 (2018-10-17)

  • 添加对 Python 3.8 的支持。

  • 添加对 XML 声明标签中 TAL 属性的支持。这解决了 issue #269。

  • 添加对 tal:on-error 语句的自定义异常处理支持。现在有一个名为 on_error_handler 的选项作为模板配置(issue #266)。

  • 修复双 ‘$$’ 转义影响非插值表达式(如裸 ‘$$’)的问题(issue #265)。

  • 修复反斜杠美元转义会导致反斜杠字符仍然存在的问题。

3.4 (2018-07-14)

错误修正

  • 修复了多节点情况下翻译的回归问题。

3.3 (2018-05-23)

错误修正

  • 在渲染内部宏调用时重置错误令牌。

  • 修复了导致递归的异常处理器的边缘情况。[MatthewWilkes]

3.2 (2017-10-06)

功能

  • 添加自动变量 macroname,它绑定到正在执行的宏的名称。修复了 https://github.com/malthe/chameleon/issues/238

  • 现在可以在模板类上配置分词器。这在模板文件输入在解析之前被修改(例如,一些标签被删除)的情况下很有用,这样就需要相应地偏移令牌位置,以便正确渲染错误位置。

  • 表达式错误现在显示源标记(以前只显示文件名、行和列)。

  • 不再需要将 Python 源文件导入模块。[mrh1997]

优化

  • 异常跟踪现在将元数据分配推迟到错误发生时。

3.1 (2017-02-21)

功能

  • 添加选项 restricted_namespace,它控制是否限制命名空间仅用于页面模板语言中定义和使用。[hansroh]

错误

  • 修复了属性 HTML 实体转义问题,其中实体(如 &)会被编码两次。

优化

  • 简化异常跟踪,显著减小字节码大小。

  • 在表达式插值期间避免检查静态字符串是否为 None

3.0 (2016-12-07)

错误

  • 修复了 Python 2 中的一个问题,即使用管道运算符时没有清除异常,因此可以通过 sys.exc_info() 访问。[mrh1997]

  • “存在”表达式不再泄露错误信息。

  • 在内容和字符串表达式中将 ‘$$’ 转义为 ‘$’。

  • 修复了在翻译块中使用宏定义的问题。

改进

  • 允许未引用的属性值。

  • 将尝试将非宏作为宏使用时抛出的属性错误包装为 RenderError 以获取正确的错误输出。

  • 如果 XML 注释中出现 ‘–’(双连字符),则抛出解析错误。

  • 现在 i18n:target 属性会覆盖默认的 target_language 变量并将其传递给翻译函数。

  • 在磁盘缓存模块名称中包含文件名。以前,只使用十六进制表示的 SHA 摘要,这使得很难看到模块来自哪里。这修复了 issue #132。

  • 添加了对非 ASCII 属性名的支持。[sank]

兼容性

  • 取消对 Python 2.6、3.1 和 3.2 的支持。

2.25 (2016-09-24)

  • 添加了对 Python 3.5 的显式支持/测试。

  • 将负向正则表达式匹配中的 \r 添加到变色龙解析器中,因为使用了 \n 但缺少了 \r。修复了一个情况,标签名称被解析为 html\r 而不是 html。修复:https://github.com/malthe/chameleon/issues/219

2.24 (2015-10-28)

  • 修复了 Python 3.5 兼容性。

  • 修复了棕色袋发布。

2.23 (2015-10-26)

  • 添加了 enable_data_attributes 选项,允许使用 HTML5 数据属性作为控制属性,而不是或除了 XML 命名空间属性。

2.22 (2015-02-06)

  • 修复了棕色袋发布。

2.21 (2015-02-06)

  • 添加了 RenderError 异常,表示在评估表达式期间发生了错误。

  • 清理了 TemplateError 异常实现。

2.20 (2015-01-12)

  • 当使用 TemplateLoader(或其派生类)加载时,将 search_path 传递给模板类。[faassen]

2.19 (2015-01-06)

  • 修复了日志弃用问题。

  • 修复了基于环境的配置日志错误。

2.18 (2014-11-03)

  • 修复了轻微的编译错误。

2.17 (2014-11-03)

  • 添加了对 i18n:context 的支持。[wiggy]

  • 添加了缺失的“parity”重复属性。[voxspox]

  • 从环境中获取变量时不要修改环境。[fschulze]

2.16 (2014-05-06)

  • 如果重复表达式评估为 None,则现在相当于一个空集。

    这更改了 2.14 中引入的行为。

    这修复了问题 #172。

  • 删除了对已弃用的 distribute 的 fossil 测试依赖。

  • 添加了对 Python 3.3/3.4 的显式支持和测试。

  • 放弃了对 Python 2.5 的显式支持(已停止维护,不再由 toxTravis-CI)支持。

2.15 (2014-03-11)

  • 添加了对 Python 3.4 的 NameConstant 的支持。[brakhane]

2.14 (2013-11-28)

  • 使用 TAL 命名空间重复元素时不再包含空格。这修复了问题 #110。

  • chameleon.interfaces 模块使用绝对导入。这修复了问题 #161。

2.13-1 (2013-10-24)

  • 修复了棕色袋发布。

2.13 (2013-10-21)

错误修正

  • 模板缓存机制现在包括作为缓存键一部分的附加配置设置,例如 stricttrim_attribute_space。[ossmkitty]

  • 修复了有时缓存模板无法正确加载的缓存问题。[ossmkitty]

  • 在调试模式下,当模块加载器被垃圾回收(在 __del__)时,正确地删除临时文件。[graffic]

  • 修复了在翻译中使用重复的 i18n:name 指令时的错误消息。

  • chameleon.tal.RepeatDict 上使用 getattr 的三个参数形式不再引发 KeyError,允许使用 getattr 提供的默认值。这修复了在 PyPy 下尝试将 RepeatDict 适配到 Zope 接口的问题。

2.12 (2013-03-26)

变更

  • tal:case 条件成功时,现在不会触发其他任何条件。

错误修正

  • 隐式翻译现在正确地提取和规范整个句子,而不是单词。[witsch]

  • tal:case 条件中的 default 符号现在仅当没有其他条件成功时才允许元素。

2.11 (2012-11-15)

错误修正

  • 解决了将 METAL 语句与 tal:on-error 处理程序组合在一起的问题。

  • 修复了与格式错误的处理指令相关的轻微解析器问题。

  • 为 Python 内联代码块提供适当的错误处理。

功能

  • 简单的翻译函数现在支持 translationstring 接口。

优化

  • 进行了轻微的优化,正确地检测到元素没有属性。

2.10 (2012-10-12)

弃用功能

  • 已弃用 fast_translate 函数。现在默认的翻译函数始终是一个简单的函数,它将映射插值到消息默认值或ID。

    动机在于,自2.9版本以来,context 参数不再简单:传递了 econtext 映射。这打破了Zope平台对 context 参数是HTTP请求的期望。以前,使用Chameleon时,该参数根本未提供,因此没有引起此类问题。

  • ast24 模块已被重命名为 ast25。这应该有助于消除Chameleon 2.x可能支持低于2.5版本的Python解释器(实际上不支持)的任何混淆。

功能

  • ProxyExpr 表达式类(因此是 load: 表达式类型)现在是一个TALES表达式。在实际情况中,这意味着表达式类型(使用标准的 "${...}" 插值语法计算字符串结果并通过函数代理结果)现在支持使用管道运算符("|")的回退。这解决了问题 #128。

  • 现在尝试使用空字符串作为表达式进行插值(即 ${})将不会执行任何操作:字符串 ${} 将原样输出。

  • 现在在 tal:attributes 中支持使用字典表达式添加、修改和删除属性(类似于Genshi的 py:attrs 指令)

    <div tal:attributes="name value; attrs" />

    在上面的示例中,name 是一个标识符,而 valueattrs 是Python表达式。但是,attrs 必须评估为Python字典对象(更简洁地说,值必须实现字典API方法 update()items())。

优化

  • 为了减少编译函数对象的大小,一些转换和引用语句被放入了函数中。在一次测量中,减少了35%。基准测试套件 报告渲染时间增加(实际上略有减少)。

错误修正

  • 如果为 metal:fill-slot 传递了一个简单的字符串,现在将引发异常。这解决了问题 #89。

  • 现在永远不会翻译空字符串。这不是一个真正的错误,但它已被报告为一个问题(#92),因为一些翻译框架错误地处理了这种情况。

  • 模板模块加载器(文件缓存)现在正确地将生成的模板源代码编码为UTF-8。这解决了问题 #125。

  • 修复了在嵌套模板渲染中可能会不安全地重用闭包的问题。

  • 修复了标记类 __repr__ 方法。这解决了问题 #124。

  • 添加了缺失的返回语句,以在发生异常时打印非缩写文件名。[tomo]

2.9.2 (2012-06-06)

错误修正

  • 修复了PyPy不兼容性。

  • 修复了导致某些平台上测试失败的问题 #109。

2.9.1 (2012-06-01)

错误修正

  • 修复了问题 #103。现在 tal:on-error 语句始终为元素添加显式的结束标签,即使替换内容为空。

  • 修复了问题 #113。现在 tal:on-error 语句对于动态属性也正确工作。也就是说,回退标签现在仅包括静态属性。

  • 修复了阻止基准正确运行的名称错误。

兼容性

  • 修复了Python 3上的弃用警告,该警告会导致zope interface implements声明的问题。这解决了问题 #116。

2.9.0 (2012-05-31)

功能

  • 翻译函数现在将 econtext 参数作为 context 的值。注意,从历史上看,这通常是一个HTTP请求,它可能通过字典接口提供语言协商数据。[alvinyue]

错误修正

  • 修复了导入别名问题,这会导致生成的Python代码中出现语法错误。修复了问题#114。

2.8.5 (2012-05-02)

错误修正

  • 修复了在Python 2.5和3上安装时的小问题。[ppaez]

  • 确保即使输出很 trivial(一个空字符串),输出也是 unicode。

2.8.4 (2012-04-18)

功能

  • 在异常输出中,现在将长文件名截断为60个字符输出,防止行换行,这使扫描异常输出变得困难。

错误修正

  • 在编译期间引发的异常中,现在在异常输出中包含文件名和位置。

  • 如果给出了一个 trivial 的翻译替换变量(即一个空字符串),则简单地忽略它。这修复了问题#106。

2.8.3 (2012-04-16)

功能

  • 在烹饪之前,在调试级别上记录模板源。

  • 如果给出,则 target_language 参数现在在模板中作为变量可用。

2.8.2 (2012-03-30)

功能

  • 在调试模式下使用的临时缓存现在会积极清理,而不是等待进程终止。[mitchellrj]

错误修正

  • 现在可以在 TAL 重复对象上的 indexstartend 方法上调用。这修复了与 ZPT 不兼容的问题。

  • 加载器现在正确处理 Windows 上的绝对路径。[rdale]

2.8.1 (2012-03-29)

功能

  • 异常格式化器现在按“包装顺序”列出错误。这意味着最内层的、可能是最相关的异常最后显示。

错误修正

  • 异常格式化器现在正确识别嵌套错误,并且不会重新包装动态生成的异常类。

  • 异常格式化器现在正确设置 __module__ 属性为原始异常类的。

2.8.0 (2012-02-29)

功能

  • 添加了对使用 <?python … ?> 处理指令语法的代码块的支持。

    作用域直到最近的宏定义或模板本身,如果未使用宏。

错误修正

  • 回退到异常类的 __new__ 方法以安全地创建未在 Python 中实现的异常对象。

  • 异常格式化器现在跟踪已经格式化的异常,并从进一步输出中忽略它们。

2.7.4 (2012-02-27)

  • 错误处理器现在调用 BaseException__init__ 方法而不是可能被覆盖的方法(该方法可能需要必需的参数)。这修复了问题#97。[j23d, malthe]

2.7.3 (2012-01-16)

错误修正

  • trim whitespace选项现在正确地修剪实际空白到单个字符,位于元素前缀或后缀字符串的左侧或右侧。

2.7.2 (2012-01-08)

功能

  • 添加了选项 trim_attribute_space,该选项决定是否删除属性空白(最多减少到单个空格)。此选项存在是为了与参考实现提供兼容性。修复了问题#85。

错误修正

  • 在生成反向内置映射以快速查找内置值时,忽略不可哈希的内建项。[malthe]

  • 即使在没有翻译函数的情况下,也应用翻译映射。这修复了问题#83。[malthe]

  • 修复了问题#80。插槽的翻译域由源文档定义,即提供插槽内容的模板,无论是默认的还是通过 metal:fill-slot 提供的。[jcbrand]

  • 在某些情况下,一个 Unicode 非换行空格字符会导致定义条款解析失败。

2.7.1 (2011-12-29)

功能

  • 在 CDATA 中启用表达式插值。

  • 页面模板类现在实现了对宏的字典访问。

    template[name]

    这是一个简写。

    template.macros[name]

错误修正

  • 无效的定义条款会被静默忽略;我们现在引发语言错误异常。这修复了问题#79。

  • 修复了回归,其中 ${...} 插值表达式无法跨越多行。这修复了问题#77。

2.7.0 (2011-12-13)

功能

  • 现在 load: 表达式从字符串表达式派生,因此可以使用 ${...} 操作符进行表达式插值。

  • 现在 load: 表达式接受资产规范;这些规范通过 pkg_resources.resource_filename 函数解析。

    <package_name>:<path>

    测试套件中的一个示例

    chameleon:tests/inputs/hello_world.pt

错误修正

  • 如果翻译的属性名称不是有效的 Python 标识符,编译器会生成无效的代码。这个问题已经修复,并且当属性规范包含逗号时,编译器现在也会抛出异常。(注意,当通过 i18n:translate 语句指定翻译的属性时,唯一的有效分隔符字符是分号)。这解决了问题 #76。

2.6.2 (2011-12-08)

错误修正

  • 修复了 tal:on-error 不尊重 tal:omit-tag 或默认省略的命名空间元素(如 <tal:block />)的问题。

  • 修复了由于初始化不正确,基于文件的模板上不可用 macros 属性的问题。

  • 在 Python 3.3 上不可用的 TryExceptTryFinally AST 节点已被别名为 Try。这解决了问题 #75。

功能

  • TAL 重复项现在在 Zope 2 平台上做出安全声明,允许访问未受保护的子对象。

    __allow_access_to_unprotected_subobjects__ = True

    这是为了与旧版本兼容,并且不会影响其他环境。

  • 模板对象现在有一个方法 write(body),该方法明确地对字符串输入进行解码和烹饪。

  • 添加了配置选项 loader_class,该选项设置用于创建模板加载对象类的类。

    这个类(本质上是一个可调用对象)在模板构造时创建。

2.6.1 (2011-11-30)

错误修正

  • 在表达式插值字符串中解码 HTML 实体。这解决了问题 #74。

  • 允许 TAL、I18N 和 METAL 命名空间元素上的 xmlxmlns 属性。这解决了问题 #73。

2.6.0 (2011-11-24)

功能

  • 添加了对隐式翻译的支持

    implicit_i18n_translate 选项启用文本的隐式翻译。 implicit_i18n_attributes 启用属性的隐式翻译。后者必须是一个集合,并且为了使属性隐式翻译,其小写字符串值必须包含在集合中。

  • 添加了 strict 选项(默认启用),该选项决定是否要求表达式在编译时有效。也就是说,如果没有设置,只有在评估时才会引发无效表达式的异常。

  • 只有当表达式在渲染期间尝试评估时,表达式错误才会导致异常。

  • 添加了配置选项 prepend_relative_search_path,该选项决定是否将相对于基于文件的模板的路径添加到加载搜索路径。默认值为 True

  • 为基于文件的模板类添加了配置选项 search_path,该选项将添加到与 load: 表达式绑定的模板加载实例的额外路径。该选项接受一个字符串路径或一个产生字符串路径的可迭代对象。默认值是空集合。

错误修正

  • 异常实例现在支持 pickle/unpickle。

  • 在 i18n:attributes 中的属性不再需要与现有或动态属性匹配才能出现在元素中。这解决了问题 #66。

2.5.3 (2011-10-23)

错误修正

  • 修复了即使存在父宏定义,嵌套宏槽定义也会失败的问题。这解决了问题 #69。

2.5.2 (2011-10-12)

错误修正

  • 修复了技术无效输入会导致编译器错误的问题。

功能

  • 现在标记类从Unicode字符串类型继承,因此与字符串接口兼容。

2.5.1 (2011-09-29)

错误修正

  • 符号名称“convert”、“decode”和“translate”现在不再设置为只读的编译器内部变量。这修复了问题#65。

  • 修复了一个问题,在该问题中,如果槽定义嵌套(例如,模板使用扩展宏的宏),则宏扩展链嵌套两级将丢失中间槽定义。

    如果在一个宏扩展上下文之外使用嵌套槽定义,编译器现在会抛出一个错误。

2.5.0 (2011-09-23)

功能

  • 现在有一个表达式类型 structure: 可用,它可以包装表达式结果为 structure,以便在插入时不会被转义,例如。

    <div id="content">
       ${structure: context.body}
    </div>

    这也意味着,对于 tal:contenttal:replacestructure 关键字现在可以通过表达式类型 structure: 来使用替代拼写。

  • 基于字符串的模板构造函数现在可以接受编码后的输入。

2.4.6 (2011-09-23)

错误修正

  • tal:on-error 语句应该捕获所有异常。

  • 修复了一个问题,该问题会阻止出现在文本中的插值表达式值的转义。

2.4.5 (2011-09-21)

错误修正

  • tal:on-error 处理程序应该定义一个 error 变量,其值是抛出的异常。

  • tal:on-error 语句是一个替换语句,应该支持“text”和“structure”插入方法。

2.4.4 (2011-09-15)

错误修正

  • 现在将读取XML文档序言中指定的编码,并将其用于将模板输入解码为Unicode。这修复了问题#55。

  • 在Python 3上,现在正确地解码了编码的表达式输入。以前,字符串表示输出将包括实际解码的字符串。

  • 现在在错误处理中正确地包括了表达式结果转换步骤,因此异常输出指向表达式位置。

2.4.3 (2011-09-13)

功能

  • 当提供编码时,将“ignore”标志传递以避免与不良输入相关的解码问题。

错误修正

  • 修复了pypy兼容性问题(在之前的版本中引入)。

2.4.2 (2011-09-13)

错误修正

  • 修复了编译器中的一个问题,其中内部变量(如翻译默认值)会被缓存,从而导致变量作用域损坏(参见问题#49)。

2.4.1 (2011-09-08)

错误修正

  • 修复了一个问题,其中属性的默认值有时会溢出到另一个属性。

  • 修复了一个问题,其中在属性插值表达式中使用“default”名称会打印属性值。这是出乎意料的,因为它是一个表达式,而不是适合输出的静态文本。现在,default 的属性值正确地放弃了该属性。

2.4.0 (2011-08-22)

功能

  • 添加了一个选项 boolean_attributes,用于使用布尔逻辑评估和渲染提供的属性集:如果属性是真实值,则值将是属性名称,否则属性将被删除。

    在参考实现中,以下属性在模板以HTML模式渲染时被配置为布尔值

    "compact", "nowrap", "ismap", "declare", "noshade",
    "checked", "disabled", "readonly", "multiple", "selected",
    "noresize", "defer"

    注意,在Chameleon中,这些属性必须手动提供。

错误修正

  • 回车符(在Windows平台上使用)会错误地包含在Python注释中。

    现在将其替换为换行符。

    这修复了问题#44。

2.3.8 (2011-08-19)

  • 修复了仅影响Python 2.5的导入错误。

2.3.7 (2011-08-19)

功能

  • 添加了一个选项 literal_false,它禁用了删除具有 False 值的属性(除 None 之外)的默认行为。此修改后的行为是参考实现表现出的行为。

错误修正

  • 取消属性特殊HTML属性行为(参见上一版本)。

    结果证明,这并不是兼容的行为;相反,布尔值应简单地强制转换为字符串。

    同时,参考实现确实支持一个HTML模式,在该模式中表现出特殊属性行为。

    我们目前不支持此模式。

2.3.6 (2011-08-18)

功能

  • 某些HTML属性名称现在在属性值为True(如果没有定义默认值则为default)时具有特殊行为。对于这些属性,此返回值将导致名称被打印为值。

    <input type="input" tal:attributes="checked True" />

    将渲染为:

    <input type="input" checked="checked" />

    此行为与参考实现兼容。

2.3.5 (2011-08-18)

功能

  • 添加了对集合运算符({item, item, ...})的支持。

错误修正

  • 如果宏在具有翻译名称的同一元素上定义,这不再会导致“翻译名称不允许在翻译之外”的错误。这修复了问题#43。

  • 属性回退到字典查找现在可以在多个项目上工作(例如d1.d2.d2)。这修复了问题#42。

2.3.4 (2011-08-16)

功能

  • 在插入属性或文本内容时,如果值为True(如FalseNone),则不执行任何操作。

  • "attrs""default"使用静态分配的变量。此更改提高了15-20%的性能。

  • 模板加载器类现在接受一个可选参数default_extension,它接受一个文件扩展名,如果没有扩展名,则将其附加到文件名。

错误修正

  • 如果未提供属性默认值,则默认符号现在为属性True。请注意,结果是属性被删除。这修复了问题#41。

  • 修复了将变量"type"赋值失败的问题。这修复了问题#40。

  • 修复了将重复循环的赋值失败(不成功)到编译器内部名称不会导致错误的问题。

  • 如果翻译函数返回相同的对象,则手动将其转换为字符串。这修复了与翻译函数的兼容性问题,这些翻译函数不将非字符串对象转换为字符串值,而是简单地返回它们未更改的形式。

2.3.3 (2011-08-15)

功能

  • 现在,load:表达式将其初始关键字参数传递给其模板加载器(例如auto_reloadencoding)。

  • 在异常输出中,字符串变量值现在限制为有限的字符输出,仅单行。

错误修正

  • 修复了异常位置信息(即‘String:’,‘Filename:’和‘Location:’)的水平对齐问题,以便与模板异常格式化程序匹配。

2.3.2 (2011-08-11)

错误修正

  • 修复了i18n:domain不会通过宏和插槽继承的问题。这修复了问题#37。

2.3.1 (2011-08-11)

功能

  • 现在可以使用Builtin节点类型来表示任何Python本地或全局名称。这允许表达式编译器引用例如getgetitem,或者显式要求使用例如来自extra_builtins字典的内置对象。

错误修正

  • 可以重新定义未明确禁止的内置,并用作变量(例如nothing)。

  • 修复了编译器中的循环节点注释循环问题。

2.3 (2011-08-10)

功能

  • 添加了对以下语法的支持以禁用在注释中的内联评估

    <!–? comment appears verbatim (no ${…} evaluation) –>

    请注意,初始的问号字符(?)将从输出中省略。

  • 解析器现在接受属性中的‘<’和‘>’。请注意,这是无效的标记。以前,‘<’不会被视为有效的属性值,但这会导致其他地方的“意外的结束标签”错误。这修复了问题#38。

  • 表达式编译器现在提供了assign_textassign_value方法,以便模板引擎可能配置此值转换以支持例如编码字符串。

    请注意,目前,assign_text方法的唯一客户端是字符串表达式类型。

  • 启用基于字符串的模板类的模板加载器。请注意,可以在初始化时提供 filename 关键字参数,通过文件名来识别模板源。这解决了问题 #36。

  • 向页面模板类添加了 extra_builtins 选项。这些内置函数在烹饪时添加到默认的内置字典中,并且可以使用 extra_builtins 关键字参数在初始化时提供。

错误修正

  • 如果为填充槽设置了翻译域,则使用此设置而不是宏模板域。

  • Python 表达式编译器现在可以正确解码 HTML 实体 'gt''lt'。这解决了问题 #32。

  • 字符串表达式编译器现在可以正确处理编码文本(当启用编码字符串支持时)。这解决了问题 #35。

  • 修复了在基于文件的模板上设置 filename 属性不会自动导致无效化的问题。

  • Chameleon 抛出的异常现在可以通过 copy.copy 复制。这解决了问题 #36。[leorochael]

  • 如果复制异常在异常处理程序中失败,则简单地重新抛出原始异常并记录一个警告。

2.2 (2011-07-28)

功能

  • 添加了新的表达式类型 load:,它允许加载一个模板。支持相对路径和绝对路径。如果提供的路径是相对的,则它将与模板的目录一起解析。

  • 添加了对表达式动态评估的支持。

    请注意,这是为了支持遗留应用程序。目前它尚未集成到提供的模板类中。

  • 模板类现在有一个 builtins 属性,可用于定义在模板变量作用域中始终可用的内置变量。

不兼容性

  • 基于文件的模板类不再接受 loader 参数。此参数用于从相对路径加载模板,使用 find(filename) 方法。然而,这未记录,并且可能不是非常有用,因为我们已经有了 TemplateLoader 机制。

  • 编译后的模板模块现在包含一个 initialize 函数,该函数接受映射到模板内置值的值。此函数的返回值是一个包含渲染函数的字典。

错误修正

  • 基于文件的模板类不再验证模板文件的存在(使用 os.lstat)。如果启用即时解析,则现在隐式发生,否则在首次需要时(例如在渲染时)发生。

    这被视为一个错误修复,因为以前的行为可能不是你所期望的,特别是如果应用程序初始化了大量的模板而不需要立即渲染它们。

2.1.1 (2011-07-28)

功能

  • 改进了异常显示。现在表达字符串在原始源(如果可用)的上下文中显示,并使用标记字符串指示表达式在模板源中的位置。

错误修正

  • structure 插入模式现在可以正确解码任何表达式类型(包括 string:)的实体。这解决了问题 #30。

  • 在异常格式化器变量列表中不显示内部变量。

2.1 (2011-07-25)

功能

  • 表达式插值(使用 ${...} 操作符和以前也使用 $identifier)现在除了 string: 表达式类型之外的所有地方都需要花括号。

    这个更改是由许多遗留模板中出现的无花括号的插值格式 $identifier 作为文本而触发的。

2.0.2 (2011-07-25)

错误修正

  • 不要为 lambda-scoped 变量使用动态变量作用域(#27)。

  • 避免在堆栈跟踪中重复异常类和消息。

  • 修复了当宏设置为在同一元素上使用时,会忽略 metal:fill-slot 的问题(#16)。

2.0.1 (2011-07-23)

错误修正

  • 修复了从宏槽中定义全局变量失败的问题(它们会被视为局部变量)。这也影响了从槽内部进行的错误报告,因为这会在内部记录为全局变量。

  • 修复了模板缓存摘要(用于文件名)的问题;现在每当对可用的发行版集(sys.path上的包)进行更改时,模块都会失效。

  • 改进了异常处理程序,以便更好地让异常通过渲染器传播。

  • 基于磁盘的模块编译器现在会对模板源文件名进行修改,使得输出的Python模块有效且位于根级别(点号和连字符被下划线替换)。这修复了问题#17。

  • 修复了Python 2.5上的翻译(i18n)。

2.0 (2011-07-14)

  • 点是发行版。

2.0-rc14(2011-07-13)

错误修正

  • 现在当使用在标签内部时,制表符(\t)现在可以正确解析。

功能

  • RepeatDict类现在作为一个代理在单独的字典实例后面工作。

  • 添加了模板构造函数选项 keep_body,这是一个标志(也可以作为类属性),用于控制是否将模板体输入保存到 body 属性中。

    默认情况下是禁用的,除非启用调试模式。

  • 页面模板加载类现在接受一个可选的 formats 参数,该参数可用于选择替代模板类。

2.0-rc13(2011-07-07)

错误修正

  • 反斜杠字符(后跟可选空格和换行符)现在被正确地解释为Python表达式的续行符。

功能

  • Python表达式实现现在通过新的 parse 方法对外部子类化更加灵活。

2.0-rc12(2011-07-04)

错误修正

  • 模板现在不再将初始关键字参数“泄漏”到模板变量空间中,在宏调用之后。

  • 意外的结束标签现在是一个无法恢复的错误。

功能

  • 改进异常输出。

2.0-rc11(2011-05-26)

错误修正

  • 修复了变量名以下划线开头似乎被允许,但使用它们会导致编译器错误的问题。

功能

  • 模板变量名现在可以以单个下划线开头,但不能有两个或更多(保留供内部使用)。

    有效名称的示例

    item
    ITEM
    _item
    camelCase
    underscore_delimited
    help
  • 添加了对Genshi的注释“丢弃”语法的支持

    <!--! This comment will be dropped -->

    注意额外的感叹号(!)字符。

    这修复了问题#10。

2.0-rc10(2011-05-24)

错误修正

  • tal:attributes语句现在以不区分大小写的方式正确运行。在语句中给出的属性名将替换具有相同名称的现有属性,而不考虑大小写。

功能

  • 添加了meta:interpolation语句以控制表达式插值设置。

    禁用设置的字符串:"off""false"。启用设置的字符串:"on""true"

  • 表达式插值现在在XML注释内部工作。

2.0-rc9(2011-05-05)

功能

  • 改进了字符串解码和转换的调试支持。如果简单的连接失败,现在将尝试将输出中的每个元素强制转换为unicode,以尝试在接近坏字符串的地方触发失败。

2.0-rc8(2011-04-11)

错误修正

  • 如果宏定义了两个同名槽,调用者现在将使用单个使用来填充它们。

  • 如果提供有效的None作为翻译函数的参数,我们现在将回退到类的默认值。

2.0-rc7(2011-03-29)

错误修正

  • 修复了与Python 2.5兼容的AST的问题。这影响了至少PyPy 1.4。

功能

  • 现在,auto_reload 设置默认为类值;基本模板类默认值为 chameleon.config.AUTO_RELOAD。此更改允许子类提供自定义默认值(例如特定应用的调试模式设置)。

2.0-rc6(2011-03-19)

功能

  • 为渲染方法添加了对 target_language 关键字参数的支持。如果提供,该参数将传递给翻译函数。

错误修正

  • 内容替换表达式内部出现的 HTML 实体 'lt'、'gt' 和 'quot' 现在已转换为它们的原始字符值。这解决了无法使用 structure 动态创建元素的问题(在 ZPT 中是可能的)。需要创建此类结构的原因是 ZPT 缺乏表达式插值运算符。

  • 修复了测试套件中重复的文件指针问题(仅影响 Windows 平台)。这修复了问题 #9。[oliora]

  • 尝试写入模块源时使用已打开的文件 os.fdopen。这修复了 LP #731803。

2.0-rc5(2011-03-07)

错误修正

  • 修复了有关属性值转义的一些问题。

    1. 静态属性值现在按其在源中出现的样子包含。

      这意味着无效的属性值(如 "true && false")现在保持不变。模板引擎的任务不是纠正此类标记,至少不是在默认操作模式下。

    2. 字符串表达式编译器不再取消转义值。相反,这留给每个表达式编译器。目前只有 Python 表达式编译器取消转义其输入。

    3. 动态转义代码序列现在正确地仅替换 HTML 转义格式中的 ampersands。

导入

  • 现在可以从 chameleon 模块直接导入页面模板类和加载器类。

功能

  • 如果没有提供自定义模板加载器,现在将使用 os.abspath 解析相对路径(即当前工作目录)。

  • 使用 os.path.normpathos.path.expanduser 规范绝对路径。这确保所有路径都保持在其“规范”形式。

2.0-rc4(2011-03-03)

错误修正

  • 修复了完整字符串表达式输出引发异常的问题,如果表达式评估为 None(它应该简单地输出空值)。

  • (在模板类级别可配置的)convert 函数现在默认为 translate 函数(在运行时)。

    这修复了消息对象未使用提供的 translate 函数进行翻译(因此转换为字符串)的问题。

  • 修复了字符串插值问题,其中一个表达式紧随右大括号后面不会解析。

    这修复了问题 #5。

  • 修复了 tal:conditiontal:repeat 之后评估的错误。

功能

  • Python 表达式现在是 TALES 表达式。这意味着可以使用管道运算符在一个 try-except 序列中连接两个或更多表达式。

    此行为是从 1.x 系列移植过来的。请注意,虽然仍然可以在表达式中使用管道字符(“|”),但现在必须对其进行转义。

  • 模板缓存现在可以由多个进程共享。

2.0-rc3(2011-03-02)

错误修正

  • 修复了 atexit 处理程序。

    这修复了问题 #3。

  • 如果指定了缓存目录,现在即使不在调试模式下也将使用它。

  • 允许 TAL 命名空间中的“comment”属性。

    这修复了问题,即引用引擎允许 TAL 命名空间中的任何属性。然而,只有“comment”被广泛使用。

  • 现在模板构造函数接受一个标志 debug,无论全局设置如何,都将模板 实例 置于调试模式。

    这修复了问题 #1。

功能

  • 添加了对在评估表达式时引发的异常的处理程序。

    此处理程序引发(或尝试引发)一个新的类型为 RenderError 的异常,具有原始异常类的基类。异常的字符串值是一个格式化的错误消息,其中包含导致异常的表达式。

    如果我们无法创建异常类,则重新引发原始异常。

2.0-rc2 (2011-02-28)

  • 修复了上传问题。

2.0-rc1 (2011-02-28)

  • 首次公开发布。请参阅文档了解本系列的更新内容。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

Chameleon-4.5.4.tar.gz (180.5 kB 查看哈希值)

上传时间

构建分发

Chameleon-4.5.4-py3-none-any.whl (88.2 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面