新样式 GettextNew in version 2.5. 从版本 2.5 开始你可以使用新样式的 gettext 调用。这些的启发源于 trac 的内部 gettext 函数并且完全被 babel 抽取工具支持。如果你不使用 Babel 的抽取工具, 它可能不会像其它抽取工具预期的那样工作。 标准 gettext 调用和新样式的 gettext 调用有什么区别?通常,它们要输入的东西 更少,出错率更低。并且如果在自动转义环境中使用它们,它们也能更好地支持自动 转义。这里是一些新老样式调用的差异: 标准 gettext: {{ gettext('Hello World!') }}
{{ gettext('Hello %(name)s!')|format(name='World') }}
{{ ngettext('%(num)d apple', '%(num)d apples', apples|count)|format(
num=apples|count
)}}
新样式看起来是这样: {{ gettext('Hello World!') }}
{{ gettext('Hello %(name)s!', name='World') }}
{{ ngettext('%(num)d apple', '%(num)d apples', apples|count) }}
新样式 gettext 的优势是你需要输入的更少,并且命名占位符是强制的。后者看起 来似乎是缺陷,但解决了当翻译者不能切换两个占位符的位置时经常勉励的一大堆 麻烦。使用新样式的 gettext ,所有的格式化字符串看起来都一样。 除此之外,在新样式 gettext 中,如果没有使用占位符,字符串格式化也会被使用, 这使得所有的字符串表现一致。最后,不仅是新样式的 gettext 调用可以妥善地为 解决了许多转义相关问题的自动转义标记字符串,许多模板也在使用自动转义时体验 了多次。 表达式语句Import name: jinja2.ext.do “do”又叫做表达式语句扩展,向模板引擎添加了一个简单的 do 标签,其工作如同 一个变量表达式,只是忽略返回值。 循环控制Import name: jinja2.ext.loopcontrols 这个扩展添加了循环中的 break 和 continue 支持。在启用它之后, Jinja2 提供的这两个关键字如同 Python 中那样工作。 With 语句Import name: jinja2.ext.with_ New in version 2.3. 这个扩展添加了 with 关键字支持。使用这个关键字可以在模板中强制一块嵌套的 作用域。变量可以在 with 语句的块头中直接声明,或直接在里面使用标准的 set 语句。 自动转义扩展Import name: jinja2.ext.autoescape New in version 2.4. 自动转义扩展允许你在模板内开关自动转义特性。如果环境的 编写扩展你可以编写扩展来向 Jinja2 中添加自定义标签。这是一个不平凡的任务,而且通常不需 要,因为默认的标签和表达式涵盖了所有常用情况。如 i18n 扩展是一个扩展有用的好例 子,而另一个会是碎片缓存。 当你编写扩展时,你需要记住你在与 Jinja2 模板编译器一同工作,而它并不验证你传递 到它的节点树。如果 AST 是畸形的,你会得到各种各样的编译器或运行时错误,这调试起 来极其可怕。始终确保你在使用创建正确的节点。下面的 API 文档展示了有什么节点和如 何使用它们。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-12-22 13:31 , Processed in 0.020738 second(s), 17 queries .