配置模板语言
conftl的Python项目详细描述
配置模板语言
简单易学但功能强大的配置文件模板语言。它是web2py的模板语言的"俚语",从头开始编写,并针对文本非html数据进行了优化。
功能
简单易学-对python语法有一定了解的人可以潜入conftl中15分钟。
强大的-模板中的python代码。
用于渲染的命令行工具。
从python代码触发呈现的不同方法。
适用于系统管理、DevOps和类似角色。
性能-针对性能优化的最小代码库。
独立于平台-在Linux和Windows下测试,也可以在其他Unix平台上工作,与Python2.7兼容,与Python3.x兼容。
开始
使用pip安装conftl:
pip install conftl
或者下载源代码:
git clone https://github.com/ttt-fifo/conftl
cd conftl
python setup.py install
来自命令行的hello world:
$ render -c "name='John Smith'" Hello, {{=name}} Hello, John Smith
注意:在stdin上写hello,{{=name}
,然后是enter,ctr+d
来自python repl的hello world:
>>>>>>fromconftlimportrender>>>>>>render(content='Hello, {{=name}}',context=dict(name='John Smith'))'Hello, John Smith'>>>
先决条件
Linux或其他Unix发行版或Windows。
python 2.7或python 3.x
如果当前的实现无法与您的平台协同工作,请放置一个问题,我将尽力提供帮助。
python模块:未来
模板启动
- 模板中的明文按原样打印到输出中
lorem ipsum dolor sim amet
text clear lorem ipsum
将在输出中完全相同
lorem ipsum dolor sim amet
text clear lorem ipsum
- 模板中的python代码应该使用标记来编写。}}
例如,如果要将值3
赋给i
,则可以使用以下语法:
{{i=3}
您还可以编写多行python代码,如下例所示:
{{
import sys
def one():
return 1
i = 3
}}
- 将变量值打印到输出中,方法是对其进行标记,并在变量前面放置=号,如下所示
{{=myvar}
例如,如果i
的值为3
并且您输入了模板:
{{=i}
您将在输出中收到:
3
- 将python代码块与明文和变量输出组合在一起-不应像通常使用python那样缩进代码块,而应使用
{{pass}
特殊关键字来确定它。
无论何时将代码块写入原始python解释器,都会缩进代码。下面是原始python代码块的示例:
foriinrange(0,2):print('X',i)
上述代码的等效值为:
{{for i in range(0, 2):}}
X {{=i}}
{{pass}}
您可以从模板外部将值传递给模板变量-有多种方法可为模板提供"上下文",例如在模板外部分配变量值。查看后续章节。
高级模板主题可在模板.md中找到
示例
查看项目存储库中的"示例"文件夹。
用于渲染的命令行工具(渲染)
- 渲染命令行工具的工作方式如下:
pip install conftl
0
将从文件templatename.tmpl
获取模板,并将输出写入filename.conf
警告:filename.conf将被覆盖!!!!
如果输入模板不是由-我,你应该把模板代码放在stdin上。
注意:对于Linux和其他Unix系统,请编写模板代码并用CTR+D完成它
注意:对于Windows,用ctr+z完成模板代码,然后按回车键
如果未指定输出文件名(-o),则输出将写入stdout。
- 在命令行上提供上下文变量
您需要给i
值4
并在模板中使用它。使用-c标志:
pip install conftl
1
为多个变量赋值,只需重复-c标志多次:
pip install conftl
2
要分配复杂变量数据类型,请用双引号将赋值括起来,如下所示:
pip install conftl
3
- 来自json文件的上下文
json文件格式应类似于:
pip install conftl
4
您可以通过提供如下-j选项来调用render:
pip install conftl
5
注意:命令行变量的优先级高于json文件,例如,如果在json文件中指定i=2,在命令行中指定i=3,则i的最终值为i=3。
- 为方便起见的环境
为了方便起见,env字典自动包含在上下文中,并且它包含os环境变量。以下示例将它们打印在屏幕上:
pip install conftl
6
注意:env只在命令行工具中自动包含在context中,从python渲染(下一节)不会在context中自动包含env。
如何在模板中使用env?< /P> 许多devops/sysadmin系统通过环境变量将数据传递到其底层脚本。例如,以下shell命令: (CTR+D在末尾) 将根据系统环境变量为您提供输出: 请参见渲染-h
从python中呈现模板有三个接口:函数 考虑以下示例: 如您所见,您可以给出context=value,它是一个dict,包含您的变量数据。 函数的签名如下: 可以通过将infile=作为参数(这是模板文件)来使用该函数。如果没有给出,则应给出content=值-这将是一个包含模板内容的字符串。 输出文件可以由outfile=参数给定。如果给定,输出将写入此文件。当outfile=不存在时,输出将作为字符串返回。 如果需要使用默认分隔符以外的其他分隔符,可以这样更改分隔符: 定义一个将上下文返回为dict的函数。用template decorator装饰函数: 模板装饰器的可能参数是 必须将eihter infile=或content=作为输入。您可以省略outfile=在这种情况下,修饰函数将以字符串形式返回输出。也可以更改分隔符。用模板(…)修饰的函数必须返回dict,否则将引发异常。 这种类型的上下文计算为web2py用户所熟知,因为这是web2py控制器的布局。 Render类中的对象可以在长时间运行的进程中使用。将对象加载到内存中一次,并多次将其用于模板化多个文件: 流内和流外应该是文件句柄或stringio对象。 任意的python代码是可能的将由当前模板语言执行。我建议不要给最终用户编写模板代码的机会,除非您知道自己在做什么。恶意最终用户可能会使用多个攻击向量,这些用户有可能执行任意python代码。 如果你想模板化一个html输出,最好使用web2py的模板语言(称为yatl)。yatl在默认情况下打开了xml转义,还打开了多个html帮助函数。 在不同平台上测试实现。 请毫不犹豫地用叉子叉我到Github上。 如果您发现此代码有问题,请放置问题。 请参阅此存储库上的标记。 todor todorov-ttt fifo BSD+其他版权抵免 有关详细信息,请参见许可证。 感谢massimo di pierro和web2py团队的启发。 conftl和yatl在文档中的区别
在github上的web2pyweb2py
web2py模板语言
同一模板语言的另一个实现可以在weppy项目中找到。
7
pip install conftl
8
pip install conftl
来自python的渲染模板
render(…)
、类render
和decorator@template(…)
。请参阅下面的说明:
9
pip install conftl
0
git clone https://github.com/ttt-fifo/conftl
cd conftl
python setup.py install
1
git clone https://github.com/ttt-fifo/conftl
cd conftl
python setup.py install
2
git clone https://github.com/ttt-fifo/conftl
cd conftl
python setup.py install
3
git clone https://github.com/ttt-fifo/conftl
cd conftl
python setup.py install
4
git clone https://github.com/ttt-fifo/conftl
cd conftl
python setup.py install
已知限制
贡献
版本控制
作者
许可证
致谢
另请参见
推荐PyPI第三方库