python 模板语言_您不应该使用的3种Python模板语言

python 模板语言

当需要使用一种模板语言来编写Python Web应用程序时,有很多健壮的解决方案。

Jinja2Genshi和Mako 。 甚至还有诸如Chameleon之类的解决方案,虽然有些陈旧,但仍受Pyramid框架推荐。

Python已经存在了很长时间。 在那个时候,它深陷系统的角落,积累了一些几乎被遗忘的模板语言,非常值得一试。

就像桉树上的可爱树袋熊,在生态环境中感到高兴,有时工作起来一样危险一样,这些是很少有人听说过的模板语言,甚至应该使用的语言也更少。

3. string.Template

您是否曾经想过:“我该如何获得一种没有功能但又不需要安装任何东西的模板语言?” 涵盖了Python标准库。 虽然没有循环或条件,但string.Template类是一种最小的模板语言。

使用它本身就是简单性。


   
   
>>> import string
>>> greeting = string . Template ( "Hello, $name, good $time!" )
>>> greeting. substitute ( name = "OpenSource.com" , time = "afternoon" )
'Hello, OpenSource.com, good afternoon!'

2.twisted.web.template

您会给图书馆什么礼物?

twisted.web.template是两种模板语言。 一个是基于XML的,并且有很棒的教程

但是还有另一种,一种基于使用Python作为特定于域的语言来生成HTML文档。

它基于两个原语: twisted.web.template.tags (包含标签对象)和twisted.web.template.flattenString (将呈现它们)。 由于它是Twisted的一部分,因此它具有内置支持,可以有效地呈现异步结果。

此示例将呈现一个愚蠢的小页面:


   
   
async def render ( reactor ) :
    my_title = "A Fun page"
    things = [ "one" , "two" , "red" , "blue" ]
    template = tags. html (
            tags. head (
                tags. title ( my_title ) ,
            ) ,
            tags. body (
                tags. h1 ( my_title ) ,
                tags. ul (
                    [ tags. li ( thing ) for thing in things ] ,
                ) ,
                tags. p (
                    task. deferLater ( reactor , 3 , lambda : "Hello " ) ,
                    task. deferLater ( reactor , 3 , lambda : "world!" ) ,
                )
            )
    )
    res = await flattenString ( None , template )
    res = res. decode ( 'utf-8' )
    with open ( "hello.html" , 'w' ) as fpout:
        fpout. write ( res )

模板是使用标签的常规Python代码。<TAGNAME>指示层次结构。 它本机支持将字符串作为可渲染对象,因此任何字符串都可以。

要渲染它,您唯一需要做的就是添加一个序言:


   
   
from twisted. internet import task , defer
from twisted. web . template import tags , flattenString

def main ( reactor ) :
    return defer. ensureDeferred ( render ( reactor ) )

和结束整个事情的结尾:

 task. react ( main ) 

只需秒钟(而不是秒钟),它将呈现一个漂亮HTML页面。 在现实生活中,这些deferLater可以例如是对HTTP API的调用:它们将并行发送和处理,而无需付出任何努力。 我建议您改为阅读Twisted的更好用法 。 但是,这仍然有效。

1.吉x德

您会说:“但是,Python并不是针对 HTML喷出的特定于域的语言而优化的。” 如果有一种语言可以编译成Python,但是在定义模板方面更好,而不是按原样解决Python,该怎么办? 如果可以的话,请使用“ Python模板语言”(PTL)。

有时候,写自己的语言对于那些向风车倾斜的人来说是一个梦想家的项目。 当他们决定完全做到这一点时,对Quixote的创建者(在PyPI上可用)的讽刺并没有失去。

以下将呈现与上述Twisted相同的模板。 警告:以下无效的Python


   
   
import time

def render [ html ] ( ) :
    my_title = "A Fun page"
    things = [ "one" , "two" , "red" , "blue" ]
    "<html><head><title>"
    my_title
    "</head></title><body><h1>"
    my_title
    "</h1>"
    "<ul>"
    for thing in things:
        "<li>"
        thing
        "</li>"
    "<p>"
    time . sleep ( 3 )
    ( lambda : "Hello " ) ( )
    time . sleep ( 3 )
    ( lambda : "world!" ) ( )
    "</p>"
    "</body></html>"

def write ( ) :
    result = render ( )
    with open ( "hello.html" , 'w' ) as fpout:
        fpout. write ( str ( result ) )

但是,如果将其放在名为template.ptl的文件中,则可以使其导入到Quixote并写出模板的呈现版本:


   
   
>>> from quixote import enable_ptl
>>> enable_ptl ( )
>>> import template
>>> template. write ( )

Quixote安装了一个导入挂钩,它将导致PTL文件转换为Python。 请注意,此渲染需要秒钟,而不是秒钟; 您将不再获得自由的异步性。

Python中有如此多的模板

Python具有悠久而曲折的库历史,其中一些库可以以或多或少相似的方式实现相同的结果(例如,Python 包管理 )。

在这个愚人节,我希望你喜欢探索三种方式,你可以在Python创建模板。 相反,我建议从这些库之一开始,以了解应使用 哪些模板。

您还有另一种神秘的模板制作方法吗? 在下面的评论中分享!

翻译自: https://opensource.com/article/20/4/python-templating-languages

python 模板语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值