成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你應該(或許)沒使用過的 3 種 Python 模板語言

開發 后端
當需要使用模板語言來編寫 Python Web 應用時,有很多健壯的解決方案。有 Jinja2、Genshi 和 Mako。甚至還有 Chameleon 之類的解決方案,雖然有些陳舊,但仍被 Pyramid 框架推薦。

當需要使用模板語言來編寫 Python Web 應用時,有很多健壯的解決方案。

有 Jinja2、Genshi 和 Mako。甚至還有 Chameleon 之類的解決方案,雖然有些陳舊,但仍被 Pyramid 框架推薦。

Python 已經存在了很長時間。此時,在系統的深處,它積累了一些幾乎被遺忘的模板語言,它們都是值得一試的。

這些語言就像桉樹上可愛的考拉一樣,在自己的生態圈里快樂地生活著,有時也會有危險的工作,這些都是很少有人聽說過的模板語言,使用過的應該更少。

3. string.Template

你是否曾經想過:“如何獲得一種沒有任何特性的模板語言,而且同時也不需要 pip install 安裝任何東西?” Python 標準庫已經為你提供了答案。雖然沒有循環和條件,但 string.Template 類是一種最小的模板語言。

使用它很簡單。

  1. >>> import string 
  2. >>> greeting = string.Template("Hello, $name, good $time!") 
  3. >>> greeting.substitute(name="OpenSource.com"time="afternoon"
  4. '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 的一部分,因此它內置支持高效異步渲染。

此例將渲染一個小頁面:

  1. async def render(reactor): 
  2.     my_title = "A Fun page" 
  3.     things = ["one", "two", "red", "blue"] 
  4.     template = tags.html( 
  5.             tags.head( 
  6.                 tags.title(my_title), 
  7.             ), 
  8.             tags.body( 
  9.                 tags.h1(my_title), 
  10.                 tags.ul( 
  11.                     [tags.li(thing) for thing in things], 
  12.                 ), 
  13.                 tags.p( 
  14.                     task.deferLater(reactor, 3, lambda: "Hello "), 
  15.                     task.deferLater(reactor, 3, lambda: "world!"), 
  16.                 ) 
  17.             ) 
  18.     ) 
  19.     res = await flattenString(None, template) 
  20.     resres = res.decode('utf-8') 
  21.     with open("hello.html", 'w') as fpout: 
  22.         fpout.write(res) 

該模板是使用 tags. 來指示層次結構的常規 Python 代碼。原生支持渲染字符串,因此任何字符串都正常。

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

  1. from twisted.internet import task, defer 
  2. from twisted.web.template import tags, flattenString 
  3. def main(reactor): 
  4.     return defer.ensureDeferred(render(reactor)) 

最后寫上:

  1. task.react(main) 

只需 3 秒(而不是 6 秒),它將渲染一個不錯的 HTML 頁面。在實際中,這些 deferLater 可以是對 HTTP API 的調用:它們將并行發送和處理,而無需付出任何努力。我建議你閱讀關于更好地使用 Twisted。不過,這已經可以工作了。

1. Quixote

你會說:“但是 Python 并不是針對 HTML 領域而優化的領域特定語言。” 如果有一種語言可以轉化到 Python,但是更適合定義模板,而不是像 Python 那樣按原樣解決呢?如果可以的話,請使用“Python 模板語言”(PTL)。

編寫自己的語言,有時被說成是一個攻擊假想敵人的唐吉坷德項目。當 Quixote(可在 PyPI 中找到)的創造者決定這樣做時,并沒有受此影響。

以下將渲染與上面 Twisted 相同的模板。警告:以下不是有效的 Python 代碼:

  1. import time 
  2. def render [html] (): 
  3.     my_title = "A Fun page" 
  4.     things = ["one", "two", "red", "blue"] 
  5.     "<html><head><title>
  6.     my_title 
  7.     "</head></title><body><h1>
  8.     my_title 
  9.     "</h1>
  10.     "<ul>
  11.     for thing in things: 
  12.         "<li>
  13.         thing 
  14.         "</li>
  15.     "<p>
  16.     time.sleep(3) 
  17.     (lambda: "Hello ")() 
  18.     time.sleep(3) 
  19.     (lambda: "world!")() 
  20.     "</p>
  21.     "</body></html>
  22. def write(): 
  23.     result = render() 
  24.     with open("hello.html", 'w') as fpout: 
  25.         fpout.write(str(result)) 

但是,如果將它放到 template.ptl 文件中,那么可以將其導入到 Quixote 中,并寫出可以渲染模板的版本:

  1. >>> from quixote import enable_ptl 
  2. >>> enable_ptl() 
  3. >>> import template 
  4. >>> template.write() 

Quixote 安裝了一個導入鉤子,它會將 PTL 文件轉換為 Python。請注意,此渲染需要 6 秒,而不是 3 秒。你不再獲得自由的異步性。

Python 中的模板太多

Python 庫的歷史悠久且曲折,其中一些庫可以或多或少都能達到類似結果(例如,Python 包管理)。

我希望你喜歡探索這三種可以用 Python 創建模板的方式。另外,我建議從這三個庫之一開始了解。

 

責任編輯:趙寧寧 來源: Linux中國
相關推薦

2020-05-26 12:32:30

Python模板語言編程語言

2021-06-04 08:48:31

Dockerrunlikewhaler

2020-01-12 19:48:13

編程語言RustPython

2021-04-09 20:38:20

Vue模式.前端

2019-07-22 13:39:59

Python編輯器開發

2021-01-29 12:28:13

編程語言開發代碼

2021-01-28 23:40:58

編程語言PythonPerl

2018-06-06 09:10:34

編程語言Python庫

2024-10-30 16:39:45

2013-05-20 10:14:42

軟件工具項目工具開發工具

2022-02-14 22:04:50

瀏覽器Observer監聽

2015-08-03 10:25:58

C語言特性不為人知

2019-04-24 08:34:46

編程語言PythonJava

2022-07-07 08:00:51

Java內存模型

2022-08-18 09:51:50

Python代碼循環

2020-11-18 08:15:39

TypeScript設計模式

2014-12-17 09:27:41

開源PaaS

2022-03-28 20:57:31

私有屬性class屬性和方法

2021-12-15 23:10:34

JS Debugger 前端開發

2015-07-14 10:11:48

前端框架語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂一区二区三区 | 亚洲成人一区 | 欧美一区2区三区4区公司 | 欧美综合久久久 | 日韩美女爱爱 | 精品中文字幕在线观看 | 麻豆精品国产91久久久久久 | 九九99靖品 | 国产成人免费视频网站视频社区 | 免费视频色| 中文字幕一区在线观看视频 | 蜜桃av人人夜夜澡人人爽 | 欧美精品在线看 | 99热热热 | 青青草社区 | 国产免费拔擦拔擦8x高清 | 欧美视频在线播放 | 欧美视频第三页 | 亚洲久久一区 | 天天操天天插 | 天天综合永久入口 | 日韩中文视频 | 国产乱码精品一区二区三区忘忧草 | 成人国产在线视频 | 亚洲国产电影 | 99热在线播放 | 久久久免费精品 | 中文二区 | 国产色99精品9i | 超碰成人免费 | 欧美看片| 四虎成人免费电影 | 天堂在线中文字幕 | 99免费在线视频 | 免费毛片网站 | 国产91在线播放 | 日韩免费一二三区 | 一级片免费视频 | 9porny九色视频自拍 | 久久久www| 日韩精品一区二区三区中文在线 |