非常轻量级、内存高效、无依赖项的模板引擎(编译到python源代码)。
utemplate的Python项目详细描述
下一步
utemplate
是用于
python,主要用于pycopy,一种轻量级python
实现(https://github.com/pfalcon/pycopy)。
utemplate
语法大致基于django/jinja2语法(例如
{% if %}
,{{var}}
),但只提供最需要的功能
(例如,“filters”是函数调用的语法糖,并且
到目前为止还没有计划实施)。
utemplate
将模板编译为python源代码,特别是
一种生成函数,经过迭代产生连续的
渲染模板的部分(子字符串)。这使得
模板替换期间的内存使用情况(使用pycopy,它将启动
只有几百字节)。生成的python代码可以导入为
为了方便起见,直接提供模块或简单的加载程序类。
还有一个loader类可以动态编译模板,
如果尚未编译(如果
已更改,这是待办事项)。
为了测试/管理模板,提供了utemplate_util.py
工具。为了
例如,要快速尝试模板(假设您已经在
examples/
目录:
micropython ../utemplate_util.py run squares.tpl
或
python3 ../utemplate_util.py run squares.tpl
模板可以采用参数(这就是动态内容的生成方式)。
模板参数作为参数传递给生成器函数
从模板生成。它们也可以通过utemplate_util.py
命令行(在本例中,参数将被视为字符串,但是
如果从代码调用,可以是任何类型:
micropython ../utemplate_util.py run test1.tpl foo bar
快速语法参考
计算python表达式,将其转换为字符串并输出到 渲染内容:
{{<expr>}}
其中expr
是任意的python表达式-来自一个裸变量名,
对于函数调用,yield from
,await
表达式。
支持的语句:
{% if %}
,{% elif %}
,{% else %}
,{% endif %}
-通常的“if” 声明{% for %}
,{% endfor %}
-通常的“for”语句{% while %}
,{% endwhile %}
-通常的“while”语句{% args var1, var2, ... %}
-指定模板的参数{% set var = expr %}
-赋值语句{% include "name.tpl" %}
-静态地包括另一个模板{% include {{name}} %}
-动态包含名为 存储在变量name
中。
命名约定
目前的惯例(将来可能会调整):
- 模板的建议扩展名是
.tpl
,例如example.tpl
。 - 编译模板时,其名称中的点(
.
)将被替换 附加下划线(_
)和.py
,例如example_tpl.py
。它 因此可以使用import example_tpl
导入。 - 传递给
{% include %}
语句的名称应该是 具有扩展名的模板,例如{% include "example.tpl" %}
。 - 对于
include
的动态形式,变量应该类似地包含 模板的全名,例如{% set name = "example.tpl" %}
/{% include {{name}} %}
。
示例
examples/squares.tpl
如上所述,包含以下内容:
{% for i in range(5) %}
| {{i}} | {{"%2d" % i ** 2}} |
{% endfor %}
在examples/目录中提供了更多示例。
如果您想看到使用utemplate的完整示例web应用程序, 请参阅https://github.com/pfalcon/notes-pico。
许可证
utemplate
由paul sokolovsky编写和维护。有空的
在麻省理工学院的执照下。