使用 Jinja2 自定义模板

Posted

技术标签:

【中文标题】使用 Jinja2 自定义模板【英文标题】:Custom templating using Jinja2 【发布时间】:2014-08-11 06:22:16 【问题描述】:

我正在尝试按如下方式使用 jinja2。

假设,

以下是标签:

tags: "world":"WORLD", "c language": "Dennis Ritchie", "apple":"JOBS" 

输入:

HELLO  world , C is written by ** c language **, **** while **** java is written by  java , hola.

输出:

HELLO WORLD, C is written by Dennis Ritchie, **** while **** java is written by, hola.

简而言之,我必须做以下事情。

    分隔符 - & 如果没有预定义标签,则应为空。 如果只有单个分隔符 或 (我的意思是不成对),则不应考虑标签,否则应按原样打印。 标签应允许空格。

在 4 个中,只有 1 个和 2 个 jinja2 工作正常。

from jinja2 import Template
t = Template(input_string)
t.render(context)

但是对于第 3 和第 4,它不起作用。(或者我弄错了。)

我发现只有 1 个名为“mustache”的模板引擎支持以上所有 4 个条件。但我不知道它在性能方面是如何工作的。

由于 jinja2 是成熟的模板引擎,我认为可以自定义默认行为。

有人知道解决办法吗?

提前谢谢。

我的主要测试表明 Mustache(Pystache) 比 jinja2 快。如果可能,请提供专家意见。

http://mustache.github.io/

https://github.com/defunkt/pystache

【问题讨论】:

【参考方案1】:

最后我继续mustache。这真的是很棒的模板引擎。

http://mustache.github.io/

用于 python 的胡子构建

https://github.com/defunkt/pystache

【讨论】:

【参考方案2】:

我认为这是不可能的。 documentation 在标识符上非常清楚:

Jinja2 使用常规的 Python 2.x 命名规则。有效标识符 必须匹配 [a-zA-Z_][a-zA-Z0-9_]*。事实上非ASCII 当前不允许使用字符。这个限制可能会消失 一旦为 Python 3 完全指定了 unicode 标识符,就会立即消失。

【讨论】:

以上是关于使用 Jinja2 自定义模板的主要内容,如果未能解决你的问题,请参考以下文章

Jinja2学习

如何在 Jinja2 自定义过滤器中使用 Python 生成器

将文件部署到管理主机 | jinja2模板

自动化运维工具-Ansible Jinja2模板

Flask教程11模板

python -- 自定义web框架