python生成Java模板代码_not_so_free_marker: 依照java freemarker的语法,实现一个python版本的模板渲染工具,用于根据需要生成本文,CSV,代码等等。因为...

NotSoFreeMarker是一个模板渲染工具,支持if、循环和简单运算,用于生成复杂代码和数据表格,减少手动工作。它接受JSON格式的数据,提供基于文件和字典的调用方式。模板语法类似Freemarker,支持变量、循环和条件判断,但函数支持有限。为解决此问题,内置了一些预定义函数,如nsfm_upper。模板中还可以引入其他文件,支持注释,并且注释不会出现在渲染结果中。
摘要由CSDN通过智能技术生成

NotSoFreeMarker

本工具通过设定模板和数据,渲染最终的文本.其中模板的支持if,循环和简单的运算.可用于生成复杂的代码,数据表格等,减少手工劳动.

调用方式

本工具的目标场景是读取数据文件和模板文件进行处理.模板和数据分别重复使用,组合生成不同的文件(如读取不同表的列,生成pojo和model的代码).这样也便于其它语言调用.此外还提供了基于文本和数据字典的调用,便于python语言调用.

import NotSoFreeMarker

processed_str = NotSoFreeMarker.process(模板的内容,用于渲染的数据[map类型],include文件的路径[可选])

processed_str = NotSoFreeMarker.process_file(模板文件路径,json数据文件路径)

数据格式

如果是数据文件,格式应该是json.注意,由于python语言的原因,对json的要求比较严格.如属性的名字必须用引号括起来等.

另外,数据的根结构不能是数组.如果要用数组,需要放在某个属性下,如:

//不可以

[

1,2,3,4

]

//可以

{

"array":[1,2,3,4]

}

如果直接输入数据,数据应该是map类型.map中,可以嵌套map,数组.

模板

模板的语法使用类似freemarker(后悔当初没借鉴velocity的,感觉那个实现更简单),支持变量,循环,条件,和简单的表达式.

这里是例子数据,后面的例子都基于这个:

{

"a":1,

"b":2,

"c":[10,20,30],

"d":{

"e":"abc",

"f":"efg"

}

}

变量

变量采用${变量名的格式},例如

${a}

${c[0]}

${d.e}

另外变量这里支持简单的表达式,支持的范围以python能解析为准,比如

${a+b}

${c[10]+5*a}

${len(d.f)} //len是python里取长度的函数

函数

写变量的时候,支持简单的函数,如刚才提到的

${len(d.f)} //len是python里取长度的函数

但是,由于实现的比较简单.只支持"函数名(变量)"这样简单的函数.因此.如果要对内容进行深入一点的加工就不行了(比如想把内容变为大写,写成${内容.upper()}是不行的.因为代码无法识别这样的函数.)

为了解决这个问题,我写了几个内置函数,封装了常见的操作.他们都是用nsfm开头的.如${nsfm_upper(变量)},这种写法可以把变量的内容变为大写.

这些函数有:

nsfm_lower 变为小写

nsfm_upper 变为大写

只支持"函数名(变量)"这样简单的函数的原因:函数书写比较自由,如a.b.c(e.f.g),这其中,a.b.c或者e.f.g都有可能是变量,也可能是某个函数(如os.path.abspath)

设计的时候这里考虑的不周到.因而有一些bug.为了可用性起见.还是粗暴的用目前的方式来实现.等有时间了再改进.

循环

循环采用一对标签.

写法

${item}

输出为:

10

20

30

如果想要在循环中使用索引,可以加上index变量,写法为

${item},${index}

输出为:

10,0

20,1

30,2

条件

条件支持if,elseif,else,

写法:

0 >

a大于0

-1>

a在0和-1之间

a小于-1

#if>

其中,和#if>都必须存在,剩下两个标签可选

引用

模板还支持引入另外一个文件,这样可以把模板里公共的部分放到另外一个文件中.

注释

在模板中添加的注释,不会被渲染到结果中。

注释支持多行,注意中,尖括号与#和--之间,不可以有空格。

另外注释不支持嵌套

多行注释

-->

-->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值