包括这 3 个模板语言在内,Python 积累了许多模板语言。

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

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. 来指示层次结构的常规 Python 代码。原生支持渲染字符串,因此任何字符串都正常。

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

from twisted.internet import task, defer

from twisted.web.template import tags, flattenString

def 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 time

def render [html] ():

my_title = "A Fun page"

things = ["one", "two", "red", "blue"]

"

"

my_title

"

"

my_title

""

"

  • "

for thing in things:

"

"

thing

"

"

"

"

time.sleep(3)

(lambda: "Hello ")()

time.sleep(3)

(lambda: "world!")()

"

"

""

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 创建模板的方式。另外,我建议从这三个库之一开始了解。

你是否有另一种深奥的模板方法?请在下面的评论中分享!

本文由 LCTT 原创编译,Linux中国 荣誉推出

python模板语言_你应该(或许)没使用过的 3 种 Python 模板语言 | Linux 中国相关推荐

  1. python quit()讲解_看完本文若不能让你学通“Python”,我将永远退出编程界

    许多时候,学习过后的效果不好,可能是一些坏习惯自己还没有意识到!这篇文章教程希望可以给各位一些学习效率高坚持到底的勇气 01 学习上不明白自己要干什么.该干什么,总是让老师在后面推着屁股走.自学的朋友 ...

  2. python 括号 垃圾_有人讨厌花括号,于是他发明了Python

    有人讨厌花括号,于是他发明了Python Ronny 2018年2月7日 暂无评论 阅读 1,787 次 编程语言有上千种,但是流行的不过10来种,那些我们经常使用的编程语言都是谁在什么时候创造出来的 ...

  3. 调python返回图片_三个好习惯,帮你写好Python里的异常处理

    如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在.打个比方,当你在脚本执行时按 ctrl+c 退出,解释器就会产生一个 KeyboardInterrupt 异常.而 K ...

  4. python码神_哔哩哔哩播放量达458万次python教程,这套“码神”无偿分享哦

    python是一种计算机程序设计语言,在这之前,你可能听说过很多编程语言了,难学的c.火热的java,适合新手的Basic语言等,python就是属于这些编程语言中其中一种我们先普及一下编程语言的基础 ...

  5. python 怕网页_他文献查到凌晨两点,我用Python十分钟搞定!

    大家好,我是爱学习的趣习君. 对于应届毕业生来说,今年一定是难熬的一年.本来找工作.写论文就已经是两座大山了,还要面临论文无指导的额外压力. 这让我想到了去年毕业的表弟,当时他为了完成论文,摔烂了三个 ...

  6. python偶数列表_使用条件偶数列表创建带有地图的元组 - python

    这是我的代码: evenorodd=[1,2,3] list1=['a','b','c'] list2=['A','B','C'] res = tuple(map(lambda x: True if ...

  7. python sqlserver 列名_报表自动化,三流用Excel,二流用Python,一流用它

    从事数据工作的人都知道,企业每天都要做很多报表,这个过程当中会涉及到很多手工操作和常规性报表.为了减少人工介入,节省工作时间,我们会想办法将一部分操作用工具或代码来替代,这个过程就称为报表自动化. 报 ...

  8. 新手学java还是python知乎_编程初学者应该先学C++、Java还是Python?

    最近,看到这样的一个话题:"打算自学编程,但是不知道该先学哪门语言入门?编程初学者应该先学C++.Java还是Python?",作为一个新手,应该学什么语言入门比较好呢?相信这是困 ...

  9. python模块大全_哎呀,不错哦!3步带你用Python打造一款智能语音聊天小软件

    最近小编与中科院的同学吃饭的时候,偶然讲起来他最近的一个项目就是利用语音识别的技术和聊天机器人来实现人机交互,简而言之就是我们说话,程序识别出来我们讲的是什么,然后通过聊天机器人跟我们实现交流.我感到 ...

最新文章

  1. NET 5是.NET的未来:每个.Net开发人员必须知道什么
  2. python和sass区别_CSS 的预处理程序(Sass、LESS、Stylus 等)分别都有哪些优缺点?...
  3. Idea之使用Gradle开发Java项目
  4. android shortcut livefoulder
  5. python字典的增,删,改,查
  6. c#sort升序还是降序_c# List的sort排序方法详解
  7. windows 通过批处理 修改环境变量
  8. android AVB2.0学习总结
  9. perl和python的相互调用
  10. 发抖音上热门最佳时间 视频MD5修改器苹果手机
  11. tomcat乱码问题解决
  12. OpenRefine 开启远程访问模式
  13. 工单、工艺路线及工作中心的表结构
  14. JMeter二次开发
  15. 个人作业4 结对开发地铁
  16. 简单逆向26(c++函数修饰名,md5,动态调试,算法逆向)
  17. OneDrive 遇到的坑--0x8004deed,目前的免费网盘分析
  18. Unity模拟经营类游戏Demo部分代码及技术总结
  19. [数据结构与算法 DSA 林轩田] 1. Introduction to Data Structure and Algorithm
  20. vscode中文配置中文插件

热门文章

  1. 【NOI2019模拟2019.7.4】朝夕相处 (动态规划+BM)
  2. synchronized 详解,偏向锁,轻量锁,重量锁
  3. 【转】s3c2440 按键驱动 — 字符设备
  4. USACO3.1.1最短网络
  5. uva 3n+1 基础题
  6. SAP NetWeaver 平台介绍
  7. 华为应用锁退出立即锁_华为P40系列三大安全锁,教你锁住你的隐私 - 企业资讯...
  8. Python大数据处理扩展库pySpark用法精要
  9. Python使用Scrapy爬虫框架爬取天涯社区小说“大宗师”全文
  10. 从入门到精通:卷积神经网络初学者指南