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

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

開發(fā) 后端
包括這 3 個模板語言在內(nèi),Python 積累了許多模板語言。當(dāng)需要使用模板語言來編寫 Python Web 應(yīng)用時,有很多健壯的解決方案。

[[327633]]

包括這 3 個模板語言在內(nèi),Python 積累了許多模板語言。

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

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

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

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

3、string.Template

你是否曾經(jīng)想過:“如何獲得一種沒有任何特性的模板語言,而且同時也不需要 pip install 安裝任何東西?” Python 標(biāo)準(zhǔn)庫已經(jīng)為你提供了答案。雖然沒有循環(huán)和條件,但 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

你會給一個包羅萬象的庫送什么禮物?

當(dāng)然,不是模板語言,因為它已經(jīng)有了。twisted.web.template 中嵌套了兩種模板語言。一種是基于 XML 的,并有一個很棒的文檔

但是它還有另一種,一種基于使用 Python 作為領(lǐng)域特定語言(DSL)來生成 HTML 文檔。

它基于兩個原語:包含標(biāo)簽對象的 twisted.web.template.tags 和渲染它們的 twisted.web.template.flattenString。由于它是 Twisted 的一部分,因此它內(nèi)置支持高效異步渲染。

此例將渲染一個小頁面:

  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. res = res.decode('utf-8')
  21. with open("hello.html", 'w') as fpout:
  22. fpout.write(res)

該模板是使用 tags.<TAGNAME> 來指示層次結(jié)構(gòu)的常規(guī) Python 代碼。原生支持渲染字符串,因此任何字符串都正常。

要渲染它,你需要做的是添加調(diào)用:

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

最后寫上:

  1. task.react(main)

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

1、Quixote

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

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

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

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

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

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

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

Python 中的模板太多

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

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

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2020-05-27 09:23:29

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編輯器開發(fā)

2021-01-29 12:28:13

編程語言開發(fā)代碼

2021-01-28 23:40:58

編程語言PythonPerl

2024-10-30 16:39:45

2018-06-06 09:10:34

編程語言Python庫

2013-05-20 10:14:42

軟件工具項目工具開發(fā)工具

2019-04-24 08:34:46

編程語言PythonJava

2022-02-14 22:04:50

瀏覽器Observer監(jiān)聽

2014-12-17 09:27:41

開源PaaS

2020-11-18 08:15:39

TypeScript設(shè)計模式

2015-08-03 10:25:58

C語言特性不為人知

2022-07-07 08:00:51

Java內(nèi)存模型

2022-08-18 09:51:50

Python代碼循環(huán)

2022-03-28 20:57:31

私有屬性class屬性和方法

2021-12-15 23:10:34

JS Debugger 前端開發(fā)

2021-06-07 12:40:34

Python代碼陷阱
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品一区中文字幕乱码 | 在线看国产 | 日韩精品一区二区三区高清免费 | 91中文字幕在线观看 | 视频一区二区在线观看 | 国产高清无av久久 | 国产乱码精品1区2区3区 | 色综合天天天天做夜夜夜夜做 | 久草精品视频 | 亚洲欧美一区二区三区情侣bbw | 免费在线一区二区 | 久视频在线 | 中文字幕在线网 | 91麻豆精品国产91久久久久久 | 99精品视频免费在线观看 | 国产精品免费观看 | 午夜视频免费在线 | 国产福利在线 | 国产日韩欧美在线观看 | 一区二区成人 | 亚洲精品久久久久久国产精华液 | 国产精品综合视频 | 色www精品视频在线观看 | 国产婷婷在线视频 | 超碰导航| 国产中文字幕av | 亚洲欧美日韩一区 | 成人免费观看网站 | 97成人在线| 中文字幕 在线观看 | 伊色综合久久之综合久久 | 日韩不卡在线观看 | 欧美激情一区二区三区 | 99久久国产综合精品麻豆 | 亚洲一区二区三区免费观看 | 九色在线 | 中文字幕av在线一二三区 | 久久久免费少妇高潮毛片 | 国产精品18hdxxxⅹ在线 | 久久久高清 | 国产精品爱久久久久久久 |