仔猪模板:快速的、html感知的模板引擎

piglet的Python项目详细描述


仔猪模板
===


仔猪是kid/genshi/kajiki家族中的文本和html模板语言。


仔猪模板引擎提供:

-模板通过py:extensions/py:block(类似于jinja2)编译模板到快速python字节code.
-HTML感知模板:输出格式良好,内容
转义,防止XSS攻击。
-可重用模板函数,模板继承的深度嵌套,
灵活的翻译和嵌入的Python表达式

`文档<;http://ollycope.com/software/piglet/>;`
\`bitbucket repository<;https://bitbucket.org/ollyc/pigger>;`

这就是小猪模板的样子:

……代码::html

<;py:extends href="layout.html">;


<;py:block name="content">;
<;h1>;这是内容块。<;h1>;
<;p>;
hello$user.firstnames$user.lastname!
<;/p>;

<;!--!
下面的段落被标记为要翻译。

t;
<;p i18n:message="">;
今天是<;span i18n:name="day">;${date.strftime('%a')}<;/span>;
<;/p>;

<;p py:choose="today.weekday()">;
<;py:when test="0">;
我不比如星期一
<;/py:when>;
<;py:when test="day==4">;
我从来没法掌握星期四的窍门
<;/py:when>;
<;py:otherwise>;周末到了吗?<;/py:否则>;
<;/p>;

<;p py:for="诗中有诗">;
<;py:for each="诗中有行">;$line<;br/><;/py:for>;
<;/p>;

<;/py:block>;


也:

…代码:

hello$user.firstnames$user.lastname!

{%trans%}
今天是{%transname"day"%}${date.strftime('%a')}{%end%}
{%end%}。

{%for verse in poem%}
{%for line in verse%}$line
{%end%}
%end%}


e使用pip的最新版本(推荐):

…代码:sh

pip安装pig




安装最新源代码:

…代码::sh

hg clone https://bitbucket.org/ollyc/pigger
cd pigger
python setup.py install





/
代码::python

from pigger import htmltemplate

template=htmltemplate('<;p>;$greeting<;/p)')
打印(template.render({'greeting':'bonjour!'}))



从磁盘加载模板:

…代码::python


})



一个完全加载的示例:

…代码::python


from pigger import template loader
import gettext


loader=templateloader(
默认为false,
使用true进行开发
自动重新加载=true,

-htmlTemplate或textTemplate
Template=htmlTemplate,

函数返回gettext translations实例或兼容对象。例如,django用户可以插入
`lambda:django.utils.translation`。如果你的应用程序没有被翻译,请忽略这个参数。
translations\u factory=lambda:gettext.translation(…),


template=loader.load('mytemplate.html',encoding='utf-8')

template也可以呈现为流。这可能有助于生成您不希望同时保存在内存中的
长文档:

…代码::python

template=loader.load('huge.html',encoding='utf-8')
for s in template({'data':load_massive_dataset()}):
sys.stdout.write





inheritance
--


布局模板应该用`<;py:block>;`标记
表示定制点:

…代码::html

<;!doctype html>;
<;html>;
<;head>;
<;title py:block="title">;默认标题<;title>;
<;head>;
<;body>;
<;py:block name="content">;
content here
<;py:block>;
<;body>;
<;/html>;



代码::html

<;!--!文件:widgets.html
-->;
<;py:def function="modal(content,title='hello')">;
<;div class="modal">;
<;div class="modal dialog">;
<;div class="modal content">;
<;div class="modal header">;
<;button type="button"data dispose="modal">;x<;/button>;
<;h4 class="modal title">;$title<;/h4>;
<;/div>;
<;div class="modal body">;
${content()如果可调用(内容),则其他内容}
<;/div>;
<;div class="modal footer">;
<;button type="button">;关闭<;/button>;
<;button type="button">;保存更改<;/button>;
<;/div>;
<;/div>;
<;/div>;
<;/div>;
<;/py:def>;




>模板函数可以导入其他模板:

。代码::html

<;py:import href="widgets.html"alias="widgets"/>;
<;p>;
${widgets.modal(content="hello world!")}
<;/p>;



是否注意到函数体中的`${content()if callable content else content}`
插值?这是为了支持"py:call",它可以将模板代码块作为关键字参数传递:

。代码::html

<;py:call function="widgets.modal(fullpage=true)">;
<;py:keyword name="content">;
这是模式内容。您也可以在此处添加标记!
<;/py:keyword>;
<;/py:call>;



许可证
----





0.4.4(2017-01-08发布)
-

-py:extensions:允许contai的"ref"属性n插值,例如
``<;py:extends-ref="${template}.html>;"``
-i18n:为文本模板添加了babel提取器插件
-bugfix:whi翻译字符串中的tespace现在已正确规范化
-错误修复:修复了在使用
`{%if%}…{%else%}…{%end%}``块时文本模板中的崩溃


0.4.3(发布于2016-11-29)
ping文件扩展名
到模板类。默认情况下,`.txt``映射到
:类:`pigger.template.texttemplate`和`.html``映射到
:类:`pigger.template.htmltemplate`.
-错误修复:Unicode符号在Python 2中的模板表达式中使用时不再导致异常。
-错误修复:修复了
模板函数指令的参数列表中使用的变量名。


-``<;py:call>;``现在将其内部html作为位置参数传递,除非它
是空白。
-``<;py:call>;``现在是一个内部指令,这意味着
`<;p py:call="foo()">;>`p>;``
现在将填充`<;p>;``元素,而不是替换它。
-加载程序缓存目录可以通过``仔猪缓存`
环境变量指定。
-添加i18n:comment指令

0.4.1(2016-10-17发布)
----

-添加`{%def%}`和`{%for%}`文本模板指令
-添加``允许绝对_ paths``option to templateloader

0.4(2016-10-16发布)
----

-bugfix:确保``<;py:else>;``指令始终附加到正确的`
`<;py:if>;```
-添加了``i18n:trans``作为i18n的别名:translate
-``i18n:name``directive现在有一个较短的别名
(``i18n:s``,用于替换),并且可以接受一个可选的expr属性,
eg``<;i18n:s name="foo"expr="calculate_foo()"/>;``
-现在在不存在时,使用
插值文本作为占位符提取翻译字符串中的插值。
``i18n:name``指令的
-``py:whitespace="strip"``不再在同一行上的标记之间去除空白。
-文本模板指令现在包括`{%with%}``、
`{%extends%}`和`{%block%}``
-<;py:extend>;现在可以用来加载在模板搜索路径的其他位置使用相同的名称。
-templateloader使用的搜索算法得到了改进
-错误修复:在继承链的中间使用super()时修复重复呈现
-生成的代码在pytho支持的位置使用"yield from"n版本。
-缓存代码已经简化,将.py文件缓存到包含编译的python源代码的磁盘。
-错误修复:``py:attrs``不再引发异常
-错误修复:插值现在可以包含实体引用



0.3(2016-10-03版)
---—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-错误修复:确保语法文件包含在二进制发行版中
-错误修复:修复使用py:with重新分配
a variable


0.1(2016-10-01发布)时的未定义变量错误

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

推荐PyPI第三方库


热门话题
java在通配符泛型类型和泛型类型之间未经检查的强制转换   java Eclipse SWT Hello world教程:无法将显示解析为类型   java如何向远程用户发送注销消息?   java RDD之后的空文件是什么。保存ASTEXTFILE?   用户界面在java中创建一个htmljs UI GCalendar   Java多个哈希映射指向同一个键   Java Dowhile循环不工作?   oraclejava类。组织。阿帕奇。梁sdk。util。UserCodeException:java。sql。SQLException:无法创建PoolableConnectionFactory   java是org类型。日食用户界面。文本编辑器。*看不见   java有没有从弹出窗口复制eclipse中变量值的插件或快捷方式?   java getSubimage为我提供了期望值null   java我想让它变得更简单   swing AWTEventQueue0一直在运行,java中的程序变得非常慢   java Solr实例化类时出错:自定义类   java将ListView适配器移植到RecyclerView适配器   c#测试混合web和桌面应用程序的安全性