Pythonhtml模板库⽐较,模板化⽣成html
你的下⼀个 Python 项⽬需要⼀个模板引擎来⾃动⽣成 HTML 吗?这有⼏种选择。
在我的⽇常⼯作中,我花费⼤量的时间将各种来源的数据转化为可读的信息。虽然很多时候这只是电⼦表格或某种类型的图表或其他数据可视化的形式,但也有其他时候,将数据以书⾯形式呈现是有意义的。
但我的头疼地⽅就是复制和粘贴。如果你要将数据从源头移动到标准化模板,则不应该复制和粘贴。这很容易出错,说实话,这会浪费你的时间。
因此,对于我定期发送的任何遵循⼀个共同的模式的信息,我倾向于到某种⽅法来⾃动化⾄少⼀部分信息。也许这涉及到在电⼦表格中创建⼀些公式,⼀个快速 shell 脚本或其他解决⽅案,以便使⽤从外部源提取的信息⾃动填充模板。
但最近,我⼀直在探索 Python 模板来完成从其他数据集创建报告和图表的⼤部分⼯作。
Python 模板引擎⾮常强⼤。我的简化报告创建的使⽤案例仅仅触及了它的⽪⽑。许多开发⼈员正在利⽤这些⼯具来构建完整的 web 应⽤程序和内容管理系统。但是,你并不需要有⼀个复杂的 web 应⽤程序才能使⽤ Python 模板⼯具。
为什么选择模板?
每个模板⼯具都不甚相同,你应该阅读⽂档以了解其确切的⽤法。但让我们创建⼀个假设的例⼦。假设我想创建⼀个简短的页⾯,列出我最近编写的所有 Python 主题。就像这样:
<html> <head> <title>My Python articles</title> </head> <body> <p>These are some of the things I have written about Python:</p> <ul> <li>Pyth on GUIs</li> <li>Python IDEs</li> <li>Python web scrapers</li> </ul> </body></html>
当它仅仅是这三个项⽬时,维护它是很简单的。但是当我想添加第四个、第五个或第六⼗七个时会发⽣什么?我可以从包含我所有页⾯列表的 CSV ⽂件或其他数据⽂件⽣成它,⽽不是⼿动编码此页⾯吗?我可以轻松地为我写的每个主题创建重复内容吗?我可以以编程⽅式更改每个页⾯上的⽂本标题吗?这就是模板引擎可以发挥作⽤的地⽅。
有许多不同的选择,今天我将与你其中分享三个,顺序不分先后:、 和 。
Mako
是以 MIT 许可证发布的 Python 模板⼯具,专为快速展现⽽设计的(与 Jinja2 不同)。Reddit 已经使⽤ Mako 来展现他们的⽹页,它同时也是 Pyramid 和 Pylons 等 web 框架的默认模板语⾔。它相当简
单且易于使⽤。你可以使⽤⼏⾏代码来设计模板;⽀持 Python 2.x 和3.x,它是⼀个功能强⼤且功能丰富的⼯具,具有,这⼀点我认为是必须的。其功能包括过滤器、继承、可调⽤块和内置缓存系统,这些系统可以被⼤型或复杂的 web 项⽬导⼊。
Jinja2
Jinja2 是另⼀个快速且功能全⾯的选项,可⽤于 Python 2.x 和 3.x,遵循 BSD 许可证。Jinja2 从功能⾓度与 Mako 有很多重叠,因此对于新⼿来说,你在两者之间的选择可能会归结为你喜欢的格式化风格。Jinja2 还将模板编译为字节码,并具有 HTML 转义、沙盒、模板继承和模板沙盒部分的功能。其⽤户包括 Mozilla、 SourceForge、 NPR、 Instagram 等,并且还具有。与 Mako 在模板内部使⽤Python 逻辑不同的是,Jinja2 使⽤⾃⼰的语法。
Genshi
是我会提到的第三个选择。它是⼀个 XML ⼯具,具有强⼤的模板组件,所以如果你使⽤的数据已经是 XML 格式,或者你需要使⽤⽹页以外的格式,Genshi 可能成为你的⼀个很好的解决⽅案。HTML 基本上是⼀种 XML(好吧,不是精确的,但这超出了本⽂的范围,有点卖弄学问了),因此格式化它们⾮常相似。由于我通常使⽤的很多数据都是 XML 或其他类型的数据,因此我⾮常喜欢使⽤我可以⽤于多种事物的⼯具。
发⾏版⽬前仅⽀持 Python 2.x,尽管 Python 3 ⽀持存在于主⼲中,但我提醒你,它看起来并没有得到有效的开发。Genshi 遵循 BSD 许可证提供。
⽰例
因此,在上⾯的假设⽰例中,我不会每次写新主题时都更新 HTML ⽂件,⽽是通过编程⽅式对其进⾏更新。我可以创建⼀个模板,如下所⽰:
网页设计html代码大全继承关系<html> <head> <title>My Python articles</title> </head> <body> <p>These are some of the things I have written about Python:</p> <ul> %for to pic in topics: <li>${topic}</li> %endfor </ul> </body></html>
然后我可以使⽤我的模板库来迭代每个主题,⽐如使⽤ Mako,像这样:
plate import Templatemytemplate = Template(filename='')der(topics=("Python GUIs","Python IDEs","Python web scrapers")))
当然,在现实世界的⽤法中,我不会将这些内容⼿动地列在变量中,⽽是将它们从外部数据源(如数据库或 API)中提取出来。
这些不是仅有的 Python 模板引擎。如果你正在开始创建⼀个将⼤量使⽤模板的新项⽬,那么你考虑的可能不仅仅是这三种选择。在 上查看更全⾯的列表,以获得更多值得考虑的项⽬。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论