kiss纯无逻辑模板引擎

TemplateRex的Python项目详细描述


templaterex是一个纯模板引擎,没有嵌入的逻辑,用python编写-小而快。

哲学
----


第一个顺序是亲吻-保持简单。第二个是在逻辑域中努力保持逻辑
,逻辑域由一级脚本语言
和表示域中的内容/表示(html、xml)处理。

在html中嵌入逻辑/代码的模板引擎将继续添加功能,使其本身成为一个复杂的编程环境,比底层python语言本身功能更少,但更复杂,更神秘-violati运用接吻原理,提高学习曲线。

templaterex模板在浏览器或所见即所得编辑器中完全可见。这通过允许前端
设计人员和后端开发人员单独工作而不引入
安全问题来促进劳动分工。

由于域的分离,这种方法通常会导致干涸的代码。
例如,一个通用的核心代码库可以通过使用不同的模板(不使用单个for循环或if子句重复)来提供完全不同的外观表示和数据范围。

还有其他好处,请参阅旧金山特伦斯帕尔大学的论文"在
模板引擎中实施严格的模型-视图分离"。


----
从templaterex导入templaterex

trex=templaterex(fname='t-mytemplate.html')

row=[{cellid:'a123','volt':1.21},{cellid:'b321','volt':1.52}]

bl',{category':'用户名列表'})


doctype html>;
<;html>;
<;head>;…<;head>;
<;body>;

<;table>;
<;tr>;<;th>;单元格id<;/th>;<;th>;电压<;/th>;
<;!--begin=行-->;
<;tr>;<;td>;$cellid<;/td>;<;td>;$volt<;/td>;<;/tr>;
<;!--end=row-->;
<;/table>;
<;/body>;
<;/html>;
-


如图所示,文本块用begin=name/end=name分隔符括在html注释内。注意,结束分隔符的命名有助于快速理解复杂模板。

这些块(或节)中的文本通过调用
render_sec(块名,上下文)呈现。整体或基本模板
通过调用render()来呈现。例如,可以按层次结构指定这些块。


python代码::

淡薄电池组{{'cellid''celliid''321,'volt''volt''1.5},{'celliid''101,'volt''1.7}}
bat'hi'u'hi'bat'hi'u电池组{'celliid''102,'volt''2.5},{'celliid''141,'volt''2.7}}








br/>

trex.rendu sec.rendu secx.rendusec('tbl',{'caption''':'1.7''1.7}}}
低单元格'})

对于bat_hi_单元格中的行:
trex.render_sec('row',row)



render_str=trex.render()

-


template t-mytemplate.html---

…环绕HTML…

<;!--开始=tbl-->;
<;table>;
<;caption>;$caption<;/caption>;
<;tr>;<;th>;单元格id<;/th>;<;th>;电压<;/th>;<;/tr>;
<;!--begin=行-->;
<;tr>;<;td>;$cellid<;/td>;<;td>;$volt<;/td>;<;/tr>;
<;!--结束=行-->;
<;/表>;
<;!--结束=待定-->;

…环绕HTML…

当然,这可以通过嵌套for循环来完成,但为了清楚起见,可以给出




模板继承
~~~~~~~~~~~~~~~~~~~~~~~~~~

您可以指定基模板或布局模板。如果模板调用中的第一行包含基说明符,如

<;!--base=t-layout.html-->;





调用模板文本::

--base=t-layout.html-->;

<;!--开始=内容-->;
<;div class="conent">;

…这里的内容…

<;div>;
<;!--结束=内容-->;

…环绕HTML…

基础模板文本:




模板t-layout.html--
<;!doctype html>;
<;html>;
<;head>;…<;head>;
<;script type="text/javascript" src="../static/jquery.js">;
<;link rel="stylesheet"href="../static/style.css"type="text/css"/>;
<;body>;
<;header>;…标题东西…<;/header>;

$content

<;footer>;…基脚材料…<;/footer>;
<;/body>;
<;/html>;


..

rendered_str=trex.render()

---



template includes
~~~~~~~~~~~~~~~~~~~~~~

如果在处理include语句时遇到

<;!-include=t-header.html-->;

以下语法::

&function_to_be called($args1,'arg2',kwarg1=true,kwarg2='test')

&br/>函数名(在&;后面)必须是内置函数之一或自定义注册的函数调用。如果函数没有参数,则需要
以下匹配括号。

参数可以是用引号标识的字符串文本,true或false
布尔值、整数或浮点数或上下文变量。context
变量可以用前导$或仅仅是一个简单的单词来标识—使用
$分隔符更快,而且为了清晰起见,鼓励使用它。如果上下文变量
在上下文中找不到,则函数调用是静默的。

函数可以通过两种方式轻松注册。最简单的方法是在对象创建期间指定
自定义函数func_reg关键字。

例如::


func_custom庘dict={'format':format,'myfunc':myfunc}
trex=templaterex(fname=fspec庘template,func庘reg=func庘custom庘dict)



trex=templaterex()
树函数更新(func_custom_dict)
trex.get_template(fspec_template)


将注册python格式函数和您自己的自定义myfunc函数。
然后您可以在模板中使用以下内容:

voltage is:&;format($voltage,.1f')

上下文变量,需要在存在
函数的render调用(render_sec()或render())的上下文
字典中传递。

内置函数/过滤器
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tbd-查找函数.py中的代码


选项:用于指定节块的注释字符是默认的<;!--以及-->;。但是,这些是可选的。例如,
这里是一个具有不同注释前缀和后缀字符选项的对象创建:

trex=templaterex(fname='dhcpcd-template.conf',cmnt_u prefix='_-',cmnt_u postfix='-')

这将分析模板,查找分隔为::

##-begin=static_段-
…分区块…
end=static_section-

可以使用dev_mode参数选择此模式。例如::

trex=templaterex(fname='/etc/dhcpcd template.conf',cmnt_prefix='-',cmnt_postfix='-',dev_u mode=true)

plate:/etc/dhcpcd-template.conf部分:下面的静态部分-
接口eth0
静态IP_地址=10.10.80.202/24
静态路由器=10.10.80.1
静态域名_服务器=192.168.101.210
模板/etc/dhcpcd-template.conf部分:上面的静态部分-##

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

推荐PyPI第三方库


热门话题
通过在安卓手机中更改日期来更改java日期和时间   使用ByteBuffer性能比较在通道上执行java I/O操作   java在websphere中将响应代码403替换为404   java如何验证HQL在语法上是否正确(不执行它)?   java如何在线程中创建TextView?   php nohup:忽略输入并将输出附加到'nohup'。出局   java Android微调器增量数   java如何禁用移动版网站?   java对象上的超类如何工作?   使用Java将JSON文件从本地驱动器上传到BigQuery   java无竞争条件:两个具有不同锁但共享数据相同的块   java无法理解为什么我的程序不打印数组的内容   java如何在MySQL中创建临时过程?   java JasperReports在以pdf格式导出时不维护字体   java向gradle构建添加库