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

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

因此,对于我定期发送的任何遵循一个共同的模式的信息,我倾向于找到某种方法来自动化至少一部分信息。也许这涉及到在电子表格中创建一些公式,一个快速 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 维基上查看更全面的列表,以获得更多值得考虑的项目。

原文发布时间为:2018-06-5

本文来自云栖社区合作伙伴“Linux中国开源社区”,了解相关信息可以关注“Linux中国开源社区”。

python3 模板库_3 个 Python 模板库比较-阿里云开发者社区相关推荐

  1. python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区

    2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...

  2. python机器人编程与操作_【教程免费下载】机器人系统设计与制作:Python语言实现-问答-阿里云开发者社区-阿里云...

    前言 本书包含12章,主要介绍如何从零开始构建自主移动的机器人,并使用Python进行编程.本书所提到的机器人是用于家庭.宾馆.餐厅的服务机器人,我们将按照顺序介绍如何一步一步构建它.书中从机器人的基 ...

  3. python 智能识别 商品_阿里云货架商品识别与管理Python SDK使用示例-阿里云开发者社区...

    概述 货架商品识别与管理(Retail Image Recognition)是基于深度学习.图像检测.图像识别等技术,为新零售品牌商/经销商提供AI商品识别能力的阿里云产品:适用于货架商品识别.陈列识 ...

  4. python编写字典库_Python中的字典及举例-阿里云开发者社区

    字典 字典是python中的唯一的映射类型(哈希表) 字典对象是可变的,但是字典的键必须使用不可变对象,一个字典中可以使用不同类型的键值. 字典的方法 keys() values() items() ...

  5. mysql注册slave_创建slave库?spm=a2c4e.11155472的搜索结果-阿里云开发者社区

    云原生必备知识: 应用储存 所属技术领域: 云原生 | 名词定义 | 由于容器本身是非持久化的,因此需要解决在容器中运行应用程序遇到的一些问题.首先,当容器崩溃时,kubelet将重新启动容器,但是写 ...

  6. python 响铃_python——字符串-阿里云开发者社区

    raw字符串(原始字符串) 所见即所得,例如 print('\n') print(r'\n') \n len('\n') 1 len(r'\n') 2 Unicode 字符串 ASCII码:每个字符都 ...

  7. python opencv报错_OpenCV in Python 入门问题,python报错 -问答-阿里云开发者社区-阿里云...

    OpenCV是Intel®开源计算机视觉库.它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. 在这篇文章(译自 http://glowingpython.bl ...

  8. python电子签章_签名python的搜索结果-阿里云开发者社区

    使用C语言扩展Python(一) 开发环境:Ubuntu9.10,python2.6,gcc4.4.1 1,ubuntu下的python运行包和开发包是分开的,因此需要在新利得里面安装python-a ...

  9. python建立矩阵原理_怎么用python建立矩阵-问答-阿里云开发者社区-阿里云

    通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相关的包. NumPy 是一个非常优秀的提供矩阵操作的包.NumPy的主 ...

  10. python通信原理实验报告_【Python之旅】第五篇(一):Python Socket通信原理-阿里云开发者社区...

    只要和网络服务涉及的,就离不开Socket以及Socket编程,下面就说说Python Socket通信的基本原理. 1.Socket socket也称作"套接字",用于描述IP地 ...

最新文章

  1. 关于$_SERVER['PHP_AUTH_USER']
  2. Asp.Net 2.0中的客户端脚本
  3. 常用的三种类别的IP地址
  4. 【报表技术】IReport 图形化报表开发工具安装教程
  5. 2的32次方减1用python,第二章python入门
  6. use regular expression instead of ABAP function module to parse attachment
  7. mysql级联_MySQL 级联复制(A-B-C)
  8. JavaScript回顾与学习——条件语句
  9. Flowable学习笔记(二、BPMN 2.0-基础 )
  10. Eclispe创建jsp文件,提示错误:“The import Xxx cannot be resolved“的解决方案
  11. 卸掉IE8,降级使用
  12. jemalloc mysql5.6_Mysql-5.6安装编译全教程
  13. 对梯度提升树(GBDT)的通俗理解
  14. jdk6版本下载地址
  15. 毕业生必看,计算机毕设如何选题才能高分通过?
  16. android 半透明色值_最全的Android 颜色透明度
  17. 身份证号归属地数据库
  18. 2021年茶艺师(初级)试题及解析及茶艺师(初级)作业模拟考试
  19. 通过JAVA代码,将文字生成图片
  20. configure: error: cannot run /bin/bash config/config.sub 解决configure配置问题

热门文章

  1. ECS(centos7)安装erlang再安装rabbitmq报错erlang >= 23.2 is needed by rabbitmq-server-3.9.5-1.el7.noarch
  2. dwcc2019写php,mac网页设计软件:DreamweaverCC2019(dwcc2019直装版)
  3. Unity3d实现鼠标控制相机绕物体旋转(带阻尼)
  4. OpenOffice转PDF遇到的问题
  5. 博彦科技:区块链建立优质农产品“信任链”|FISCO BCOS 2021 Meetup上海站
  6. 关于DDoS攻击,这些基本概念你一定要知道!
  7. 火山PC抓取快递物流查询接口教程第二课
  8. Istio、eBPF 和 RSocket Broker:深入研究服务网格
  9. python图像处理-如何存储用plt或者Image打开的图像
  10. Java的marven工程读取resources文件,并打可执行的jar