非常轻量级、内存高效、无依赖项的模板引擎(编译到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 fromawait表达式。

支持的语句:

  • {% 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编写和维护。有空的 在麻省理工学院的执照下。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何用新列表替换ListView的列表   swing Java JFrame布局   java JNativehook未捕获密码   java JPA仅获取一级关联   java KeyListener是否停止使用动作或鼠标Listener?   shell如何在Ubuntu中安装java   java如何通过使用会话检索数据来跳过空值。冬眠   java如何在jsp中获取列表   java Android仅在位置(0,0)上缩放,而不是在整个图像上缩放   Java for循环格式化控制台   协议缓冲区Protobuf Java不区分大小写映射?   java模拟对象,并将它们分配给方法中的实例和静态变量   java是否可以在执行时看到对对象的所有引用?   wcf Java客户端和InstanceContextMode   java我在XMLGregorianCalendar中的“20170526T04:08:00.000+05:30”中有一个日期,我需要将其转换为20170526T04:08:00.000z   java如何让两个小程序共享字段   java保留CSS注释而不修改YUI压缩器中的内容   java Android(Kotlin)具有非字符串基元类型的双向数据绑定   Java swing:warning组合框是原始类型。对泛型类型JComboBox<E>的引用应参数化