你应该(或许)没使用过的3种Python模板语言

  发布时间:2025-11-05 08:46:05   作者:玩站小弟   我要评论
包括这 3 个模板语言在内,Python 积累了许多模板语言。当需要使用模板语言来编写 Python Web 应用时,有很多健壮的解决方案。有 Jinja2、Genshi 和 Mako。甚至还有 Ch 。

包括这 3 个模板语言在内,应该用过语Python 积累了许多模板语言。或许

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

有 Jinja2、或许Genshi 和 Mako。没使模板甚至还有 Chameleon 之类的应该用过语解决方案,虽然有些陈旧,或许但仍被 Pyramid 框架推荐。没使模板

Python 已经存在了很长时间。应该用过语此时,或许在系统的没使模板深处,它积累了一些几乎被遗忘的应该用过语模板语言,它们都是或许值得一试的。

这些语言就像桉树上可爱的没使模板考拉一样,在自己的生态圈里快乐地生活着,有时也会有危险的工作,这些都是很少有人听说过的模板语言,使用过的应该更少。

3、string.Template

你是否曾经想过:“如何获得一种没有任何特性的香港云服务器模板语言,而且同时也不需要 pip install 安装任何东西?” 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 作为领域特定语言(DSL)来生成 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)

该模板是使用 tags.<TAGNAME> 来指示层次结构的常规 Python 代码。原生支持渲染字符串,WordPress模板因此任何字符串都正常。

要渲染它,你需要做的是添加调用:

from twisted.internet import task, deferfrom twisted.web.template import tags, flattenStringdef main(reactor):    return defer.ensureDeferred(render(reactor))

最后写上:

task.react(main)

只需 3 秒(而不是 6 秒),它将渲染一个不错的 HTML 页面。在实际中,这些 deferLater 可以是对 HTTP API 的调用:它们将并行发送和处理,而无需付出任何努力。我建议你阅读关于更好地使用 Twisted。不过,这已经可以工作了。

1、Quixote

你会说:“但是 Python 并不是针对 HTML 领域而优化的领域特定语言。” 如果有一种语言可以转化到 Python,但是更适合定义模板,而不是像 Python 那样按原样解决呢?如果可以的话,请使用“Python 模板语言”(PTL)。

编写自己的语言,有时被说成是一个攻击假想敌人的唐吉坷德项目。亿华云计算当 Quixote(可在 PyPI 中找到)的创造者决定这样做时,并没有受此影响。

以下将渲染与上面 Twisted 相同的模板。警告:以下不是有效的 Python 代码:

import timedef 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。请注意,此渲染需要 6 秒,而不是 3 秒。你不再获得自由的异步性。

Python 中的模板太多

Python 库的历史悠久且曲折,其中一些库可以或多或少都能达到类似结果(例如,Python 包管理)。

我希望你喜欢探索这三种可以用 Python 创建模板的方式。另外,我建议从这三个库之一开始了解。

  • Tag:

相关文章

  • 远程桌面设置教程(轻松掌握远程桌面设置,实现远程访问需求)

    摘要:随着科技的不断发展,越来越多的人需要在不同设备之间进行远程访问和控制。而远程桌面设置是实现这一需求的重要方法之一。本文将为大家介绍如何通过简单操作实现远程访问。什么是远程桌...
    2025-11-05
  • 精通高并发与多线程,却不会用ThreadLocal?

    本文转载自微信公众号「小菜良记」,作者小菜良记。转载本文请联系小菜良记公众号。ThreadLocal 简介概念ThreadLocal 类是用来提供线程内部的局部变量。这种变量在多线程环境下访问(get
    2025-11-05
  • 漫画:程序员的幸福指数是如何下降的?

    后记:程序员的幸福指数下降了吗?看起来随着时代的进展,程序员越来越苦逼了,但是文章的背后有两点没有讲出来:1. 时代和技术的发展,极大地降低了进入编程行业的门槛,给普罗大众都提供了做程序员的机会。 最
    2025-11-05
  • Python有序字典的两个小“惊喜”

    从 Python 3.6 开始,常规的字典会记住其插入的顺序:就是说,当遍历字典时,你获得字典中元素的顺序跟它们插入时的顺序相同。在 3.6 之前,字典是无序的:遍历顺序是随机的。关于有序字典,这里有
    2025-11-05
  • OPPOR9Plus在VR方面的表现如何?(探索OPPOR9Plus在虚拟现实技术应用上的优势与不足)

    摘要:近年来,随着虚拟现实VR)技术的发展,越来越多的人开始关注并追求更好的VR体验。作为一款备受关注的手机品牌,OPPOR9Plus在VR方面的表现备受期待。本文将探索OPPOR9P...
    2025-11-05
  • 如何更好地理解中间件和洋葱模型

    相信用过 Koa、Redux 或 Express 的小伙伴对中间件都不会陌生,特别是在学习 Koa 的过程中,还会接触到 “洋葱模型”。本文阿宝哥将跟大家一起来学习 Koa 的中间件,不过这里阿宝哥不
    2025-11-05

最新评论