python模板引擎

codra的Python项目详细描述


CODRA

codra是一个用python编写的模板引擎,它在给定模板和填充该模板的数据的情况下呈现字符串

安装

pip install codra

示例

fromcodraimportTemplatetemplate=r"""Hello my name is {{ name }}. I am {{ age }} years old.This is the activities I do:{{ for i, activity in enumerate(activities) }}  {{ i }}. {{ activity }}{{ endfor}}Those are the type of numbers less than 20{{ for i in range(20) }}  {{ if is_prime(i) }}    {{i}} is prime.  {{ endif }}  {{ if not is_prime(i) }}    {{i}} is not prime.  {{ endif}}{{ endfor}}"""defis_prime(n):ifn<2:returnFalseelifn==2:returnFalseelse:foriinrange(2,n):ifn%i==0:returnFalsereturnTrueprint(Template(template).render(name="Alice",age=20,activities=["coding","playing","eating"],is_prime=is_prime,enumerate=enumerate))

格式

模板主要由数据和可执行部分组成,这些部分可以相互交错。可执行部分由双大括号包围。{{可以通过在其前面加反斜杠来转义。

可执行部分(从现在起称为构造)分为三种类型:

1. Expressions.
2. If conditions.
3. For loops.

这些构造最终在呈现后被文本替换。由于表达式可能包含标识符和函数调用,因此它们以kwargs格式提供给呈现函数,其名称显示在模板中。

语言结构

在本节中,将详细介绍不同的语言结构。

表达式

codra中的表达式可以看作是python中表达式的子集。值得注意的是,语义分析是基于python的。表达式使用python中相应的构造进行解析和计算。这可能解释了templare引擎的许多行为。

文字

字符串文本由单引号或双引号包围。

示例

'hello world'

数字文本是任何连续的数字(目前只支持整数)。尽管只支持整数作为文本,但任何表达式的结果都可以是float的整数。

1984

计划使用区分大小写的关键字true和false添加布尔文本。

算术运算符

运算符+-/*%具有与python中相同的语义。这意味着+也可以用于连接字符串。

示例

1 + 2 * 6 / 4 % 5计算结果为4

比较运算符

您可以使用==!=检查相等性,并使用<<=>和'>;=`比较不同的表达式

1 < 4是真的

逻辑运算符

andor andnot`可用于组合比较表达式的结果。

示例

1 == 2 or not 3 == 4计算结果为True

接入运营商

访问运算符用于从对象或字典中获取值。

.用于访问对象的类成员。

[]用于获取与dict中的键关联的值。

示例

person.favorite_food['morning']

函数调用

默认情况下提供内置函数lenrange。要使用其他函数,必须在render的参数中提供它们。若要调用函数,请使用其名称以及由,分隔并括在括号中的可能为空的参数列表。

示例

Template("{{ is_odd(1) }}").render(is_odd = lambda x : x % 2 == 1)计算结果为"True"

如果条件

如果仅当表达式的计算结果为true时才使用条件打印封闭数据:

if条件的语法为:

{{if_condition_}}_body_{{endif}}

if的主体可以是任何有效的模板(数据、构造或两者)。如果条件为true,则if构造的计算结果为其主体,否则,它将被空字符串替换。

示例

Template("""This is a condition to greet Alice only.{{ if name == "Alice" }}Hello {{ name }}.{{ endif }}""").render(name="Alice")

计算结果为:

"""This is condition to greet Alice only.Hello Alice."""

对于回路

循环可用于迭代任何可iterable python对象(例如列表)。

循环可以有一个或多个变量。它通过将变量分配给给定iterable中的每个项并计算循环体来转换。然后将每次迭代的结果合并为一个单元。

示例

Template("""{{ for i in range(len(lst)) }}{{i + 1}}. {{ lst[i] }}{{ endfor }}""").render(lst=['a','b','c'])

相当于:

Template("""{{ for i, e in enumerate(lst) }}{{i + 1}}. {{ e }}{{ endfor }}""").render(lst=['a','b','c'],enumerate=enumerate)

评估收件人:

"""1. a2. b3. c"""

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

推荐PyPI第三方库


热门话题
图像处理Java 8 ImageIO在Linux中无法正确读取JPEG   spring如何用Java 1.4兼容版本替换@Resource注释   java Http请求参数类型传播   在web浏览器中看不到Java Maven Tomcatplugin web应用程序   jvm在Java中使用直接内存的目的是什么?   如何从列表转换为字符串java   java setAdapter gridview发送上下文   SwingJava。方法上的lang.NullPointerException   java什么是shell脚本、makefile和ant文件   当使用getGraphics()方法时,java JPanel图形会闪烁   java如何将迭代转换为递归?   java为什么我的抽屉菜单在同一个XML上有ConstraintLayout时没有响应?   java如何在图像上画一个圆?   Android studio:Rabbitmq:Error:java。lang.ClassNotFoundException:类io。千分尺。果心仪器找不到仪表注册表