python - 可能更改 Mako 的内联开始/结束语法?

标签 python template-engine jinja2 mako

我一直在使用 Jinja2 来创建和呈现 Bash 脚本的模板(以及其他),但我一直怀念在 Mako 中使用完整的 Python 的强大功能。

目前阻止我使用 Mako 的事情似乎相当微不足道,那就是 Mako 的内联开始/结束 ${/} 语法与 Bash 自己的语法冲突(而 Jinja2 则没有)

所以我想知道的是:是否有任何方法可以将 Mako 的开始/结束 ${/} 语法更改为其他内容,其中其他内容是与 Bash 不冲突的东西。

(否则,我是否遗漏了一些明显的东西?)

最佳答案

通过 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")

关于python - 可能更改 Mako 的内联开始/结束语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11676839/

相关文章:

python - kivy:使用 on_press 事件更改根小部件中嵌套按钮的颜色

javascript - 如何将渲染的 Handlebars 模板加载到 div 中?

python - 如何更改 Django 中的模板框架?

python - 在 flask/jinja2 中编码二进制数据

python - 如何在 docker 容器中仅设置 python 2.7?

Python:在个人 Python 包中包含第三方库

java - 节奏模板继承

python - mustache 、通天塔和 gettext

python - 未定义错误 : 'current_user' is undefined

python - 即使我给它向前看和向后看的要求,正则表达式是否总是贪婪的?