你的下一个 Python 项目需要一个模板引擎来自动生成 HTML 吗?这有几种选择。

在我的日常工作中,我花费大量的时间将各种来源的数据转化为可读的信息。虽然很多时候这只是电子表格或某种类型的图表或其他数据可视化的形式,但也有其他时候,将数据以书面形式呈现是有意义的。

但我的头疼地方就是复制和粘贴。如果你要将数据从源头移动到标准化模板,则不应该复制和粘贴。这很容易出错,说实话,这会浪费你的时间。

因此,对于我定期发送的任何遵循一个共同的模式的信息,我倾向于找到某种方法来自动化至少一部分信息。也许这涉及到在电子表格中创建一些公式,一个快速 shell 脚本或其他解决方案,以便使用从外部源提取的信息自动填充模板。

但最近,我一直在探索 Python 模板来完成从其他数据集创建报告和图表的大部分工作。

Python 模板引擎非常强大。我的简化报告创建的使用案例仅仅触及了它的皮毛。许多开发人员正在利用这些工具来构建完整的 web 应用程序和内容管理系统。但是,你并不需要有一个复杂的 web 应用程序才能使用 Python 模板工具。

为什么选择模板?

每个模板工具都不甚相同,你应该阅读文档以了解其确切的用法。但让我们创建一个假设的例子。假设我想创建一个简短的页面,列出我最近编写的所有 Python 主题。就像这样:

My Python articles

These are some of the things I have written about Python:

  • Python GUIs
  • Python IDEs
  • Python web scrapers

当它仅仅是这三个项目时,维护它是很简单的。但是当我想添加第四个、第五个或第六十七个时会发生什么?我可以从包含我所有页面列表的 CSV 文件或其他数据文件生成它,而不是手动编码此页面吗?我可以轻松地为我写的每个主题创建重复内容吗?我可以以编程方式更改每个页面上的文本标题吗?这就是模板引擎可以发挥作用的地方。

有许多不同的选择,今天我将与你其中分享三个,顺序不分先后:Mako、 Jinja2 和 Genshi。

Mako

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

Genshi 是我会提到的第三个选择。它是一个 XML 工具,具有强大的模板组件,所以如果你使用的数据已经是 XML 格式,或者你需要使用网页以外的格式,Genshi 可能成为你的一个很好的解决方案。HTML 基本上是一种 XML(好吧,不是精确的,但这超出了本文的范围,有点卖弄学问了),因此格式化它们非常相似。由于我通常使用的很多数据都是 XML 或其他类型的数据,因此我非常喜欢使用我可以用于多种事物的工具。

发行版目前仅支持 Python 2.x,尽管 Python 3 支持存在于主干中,但我提醒你,它看起来并没有得到有效的开发。Genshi 遵循 BSD 许可证提供。

示例

因此,在上面的假设示例中,我不会每次写新主题时都更新 HTML 文件,而是通过编程方式对其进行更新。我可以创建一个模板,如下所示:

My Python articles

These are some of the things I have written about Python:

%for topic in topics:

${topic}

%endfor

然后我可以使用我的模板库来迭代每个主题,比如使用 Mako,像这样:

frommako.templateimportTemplate

mytemplate=Template(filename='template.txt')

print(mytemplate.render(topics=("Python GUIs","Python IDEs","Python web scrapers")))

当然,在现实世界的用法中,我不会将这些内容手动地列在变量中,而是将它们从外部数据源(如数据库或 API)中提取出来。

这些不是仅有的 Python 模板引擎。如果你正在开始创建一个将大量使用模板的新项目,那么你考虑的可能不仅仅是这三种选择。在 Python 维基上查看更全面的列表,以获得更多值得考虑的项目。

【编辑推荐】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

python3 模板库 好用_关于3个Python模板库的比较相关推荐

  1. 5个python标准库及作用_零基础编程——Python标准库使用

    摘要 书接前文: 本文将讲解Python标准库内容,有操作系统接口os.文件路径通配符glob.命令行参数sys.正则表达式re.数学math.日期与时间.数据压缩.性能评估等,我们只需要知道有些什么 ...

  2. python扩展库导入方式_使用pip安装Python扩展库的方法

    本文节选自作者的<Python编程基础及应用>视频教程.Python编程基础及应用_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 使用pip进行安装 ...

  3. Python第三方库安装——使用vscode、pycharm安装Python第三方库

    Python第三方库安装--使用vscode.pycharm安装Python第三方库 前言 pycharm vscode 结尾 Python基础 Python实例 前言 在这里介绍vscode.Pyc ...

  4. anaconda python3 安装库_痛点:Anaconda3 python第三方库批量安装

    工作中,是不是会一不小心python的IDE环境突然出bug了,崩了,进不去了.烦躁的有时候想重新装一遍IDE环境来解决问题.比如使用anaconda,也是要一个个的去conda安装或者pip安装,安 ...

  5. python 的库如何开发_一篇文章入门Python生态系统

    译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员来说,本文对Python的生态系统还是做了较为全面的介绍.文 ...

  6. .net 批量更新_痛点:Anaconda3 python第三方库批量安装

    工作中,是不是会一不小心python的IDE环境突然出bug了,崩了,进不去了.烦躁的有时候想重新装一遍IDE环境来解决问题.比如使用anaconda,也是要一个个的去conda安装或者pip安装,安 ...

  7. python内置标准库不可以处理的文件是_精华 | 140种Python标准库、第三方库和外部工具都有了...

    原标题:精华 | 140种Python标准库.第三方库和外部工具都有了 作者 | 宋天龙 来源 | 大数据(ID:hzdashuju) [导读]Python数据工具箱涵盖从数据源到数据可视化的完整流程 ...

  8. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  9. python3.7 百度网盘_编程开发工具Python v3.7.0 32/64位免费正式版下载[网盘资源] - 艾薇下载站...

    Python3.7.0是一款超好用的面向对象编程的语言功能,也是一种简单易学却功能强大的编程语言,对于初学者来说,作为入门语言可以说是十分合适了.不像是C语言.C#语言一样,晦涩难懂,要求专业性比较高 ...

  10. python经典题库和答案_吐血总结,Python经典面试题及答案

    1.python下多线程的限制以及多进程中传递参数的方式? python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单c ...

最新文章

  1. CentOS7下安装nvm
  2. Microbiome:浙大马忠华团队-生防细菌抑制病原真菌新机制
  3. fedora22 无法联网的情况下rpm安装gcc5.1
  4. ABBYY PDF Transformer+支持的格式
  5. Lintcode18 Subsets II solution 题解
  6. 独家揭秘!阿里大规模数据中心的性能分析 1
  7. vs2008环境下MFC对注册表的读写操作
  8. 用JavaScript语言判断一个三位数是否为水仙花数
  9. AMD推出7nm高端显卡Radeon VII,直指英伟达RTX 2080
  10. 31销售是让用户用到货真价实的产品
  11. 服务器上使用 git 更新 wordpress 内核方案
  12. spingMVC post 提交乱码问题
  13. 【转载】spring.net 学习系列目录
  14. Bean的生命周期详解
  15. 路由器刷openwrt
  16. 21313211312313
  17. 【PCB叠层设计与阻抗计算】1.PCB板材介绍
  18. 华为手机手机连电脑显示无法连接服务器,手机连接电脑用云服务器异常
  19. 数据增强系列(1)top10数据增强技术:综合指南
  20. 新手如何安装ai换脸软件deepfacelab中文版

热门文章

  1. TCC解决分布式事务问题
  2. 在阿里云上安装MongoDB,并且远程连接
  3. 简单实用的防止多次提交辅助类
  4. 【转】Delphi7程序调用C#写的DLL解决办法
  5. S3C2440PWM 定时器
  6. linux内存寻址解析 (一)
  7. 用glew,glfw实现opengl-学习笔记3着色器
  8. xenserver 虚拟机扩容lvm磁盘分区的方法_vm虚拟机中linux Centos7.4硬盘扩容
  9. 编写程序对给定的有向图(不一定连通)进行深度优先遍历_从零开始学习数据结构gt;图的非连通遍历...
  10. 4204. 构造矩阵