使用 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 自定义模板的主要内容,如果未能解决你的问题,请参考以下文章