可能改变Mako的内联开始/结束语法?

时间:2012-07-26 19:42:19

标签: python template-engine jinja2 mako

我一直在使用Jinja2来创建和渲染Bash脚本的模板(以及其他内容),而且我一直错过了在Mako中提供完整python的能力。

让我不能使用Mako的东西看起来相当微不足道,这就是Mako的内联开始/结束${ / }语法与Bash自己的语法冲突(而Jinja2没有)

所以我想知道的是:有没有办法将Mako的开始/结束${ / }语法改为其他东西,其他东西是不会与之冲突的东西击。

(否则,我错过了一些明显的东西吗?)

1 个答案:

答案 0 :(得分:1)

通过preprocessor

运行模板
from mako.template import Template
import re

def bash_preprocessor(source):
    source = re.sub(r"\${(.+?)}", r"${'${'}\1${'}'}", source)
    source = re.sub(r"\^\[(.+?)\]", r"${\1}", source)
    return source

t = Template("""

BAR='hi'
BAT='^[hoho]'
PATH='/path/to/crap'

EXECUTABLE=${PATH}/${BAR}/${BAT}

""", preprocessor=bash_preprocessor)


print t.render(hoho="boo")