用mako模板构建文件的方法
buildout.recipe.mako_template的Python项目详细描述
buildout.recipe.mako_template
用mako模板生成文件的构建方法,重点是 大量模板的可管理性。
内容
为构建创建此“另一个”模板配方的原因是希望具有:
- mako具有python的所有功能和模板中的良好作用域,
- source : destinatoin映射的简单列表,
- 以及碰撞检测。
Recipe Options
files:由:符号分隔的模板和目标文件路径对的列表。 它允许指定目标是否应该是可执行的,并忽略冲突。 行的格式如下:
source:target[:is_executable(true or false)[:collision_allowed(just a flag))]]
directories:模板mako的查找目录列表。模板 文件路径相对于这些目录。(默认值:${buildout:directory})
其他选项只是转发到模板,所有 其他部分通过parts[<part-name>][<option-name>]提供。
Minimal Example
buildout.cfg:
[buildout]parts=foo[foo]recipe=buildout.recipe.mako_templateauthor=Mefiles=foo_1.sh.mako : foo_1.sh
foo_1.sh.mako:
echo Hello ${author}!
将导致创建foo_1.sh:
echo Hello Me!
Larger Example
[buildout]parts=docker-compose[project]name=MyProject[docker-compose]recipe=buildout.recipe.mako_templatedirectories=${buildout:directory}/templatesgateway_ports=8080:8080files= backend.dockerfile.mako : .docker/backend.dockerfile frontend.dockerfile.mako : .docker/frontend.dockerfile gateway.dockerfile.mako : .docker/gateway.dockerfile docker-compose.yaml.mako : docker-compose.yaml
docker-compose.yaml.mako:
... gateway: container_name: ${parts['project']['name']}_gateway ports: - "${gateway_ports}" ...
Collision detection
一个模板目标被另一个模板覆盖的情况 自动检测。例如,案例:
files= foo_1.sh.mako : foo_1.sh foo_2.sh.mako : foo_1.sh # overwrites ``target`` form above
将导致生成失败,并显示消息:
Target collision is detected at 'foo_2.sh.mako : foo_1.sh'
但在某些情况下,这可能是一种可取的行为,因此可以允许 通过添加collision_allowed标志覆盖。
Links and Credits
这个食谱的灵感来自brodul.recipe.template。
要获取有关使用mako模板的更多示例和信息,请访问makotemplates。
History
0.1.2 (2018-03-19)
- 如果不存在,则添加包含文件夹的目标文件的创建。
- 将内容和有用的链接添加到readme.rst。
- 向make test命令添加覆盖率检查。 [恩基杜兰]
0.1.1 (2018-03-13)
- 解决包装问题。 [恩基杜兰]
- 更新文档,添加更多示例,添加徽章。 [恩基杜兰]
0.1.0 (2018-03-12)
- pypi上的第一个版本。