新聞中心
你的下一個 Python 項目需要一個模板引擎來自動生成 HTML 嗎?這有幾種選擇。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),周口企業(yè)網(wǎng)站建設(shè),周口品牌網(wǎng)站建設(shè),網(wǎng)站定制,周口網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,周口網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
在我的日常工作中,我花費(fèi)大量的時間將各種來源的數(shù)據(jù)轉(zhuǎn)化為可讀的信息。雖然很多時候這只是電子表格或某種類型的圖表或其他數(shù)據(jù)可視化的形式,但也有其他時候,將數(shù)據(jù)以書面形式呈現(xiàn)是有意義的。
但我的頭疼地方就是復(fù)制和粘貼。如果你要將數(shù)據(jù)從源頭移動到標(biāo)準(zhǔn)化模板,則不應(yīng)該復(fù)制和粘貼。這很容易出錯,說實(shí)話,這會浪費(fèi)你的時間。
因此,對于我定期發(fā)送的任何遵循一個共同的模式的信息,我傾向于找到某種方法來自動化至少一部分信息。也許這涉及到在電子表格中創(chuàng)建一些公式,一個快速 shell 腳本或其他解決方案,以便使用從外部源提取的信息自動填充模板。
但最近,我一直在探索 Python 模板來完成從其他數(shù)據(jù)集創(chuàng)建報告和圖表的大部分工作。
Python 模板引擎非常強(qiáng)大。我的簡化報告創(chuàng)建的使用案例僅僅觸及了它的皮毛。許多開發(fā)人員正在利用這些工具來構(gòu)建完整的 web 應(yīng)用程序和內(nèi)容管理系統(tǒng)。但是,你并不需要有一個復(fù)雜的 web 應(yīng)用程序才能使用 Python 模板工具。
為什么選擇模板?
每個模板工具都不甚相同,你應(yīng)該閱讀文檔以了解其確切的用法。但讓我們創(chuàng)建一個假設(shè)的例子。假設(shè)我想創(chuàng)建一個簡短的頁面,列出我最近編寫的所有 Python 主題。就像這樣:
My Python articles These are some of the things I have written about Python:
- Python GUIs
- Python IDEs
- Python web scrapers
當(dāng)它僅僅是這三個項目時,維護(hù)它是很簡單的。但是當(dāng)我想添加第四個、第五個或第六十七個時會發(fā)生什么?我可以從包含我所有頁面列表的 CSV 文件或其他數(shù)據(jù)文件生成它,而不是手動編碼此頁面嗎?我可以輕松地為我寫的每個主題創(chuàng)建重復(fù)內(nèi)容嗎?我可以以編程方式更改每個頁面上的文本標(biāo)題嗎?這就是模板引擎可以發(fā)揮作用的地方。
有許多不同的選擇,今天我將與你其中分享三個,順序不分先后:Mako、 Jinja2 和 Genshi。
Mako
Mako 是以 MIT 許可證發(fā)布的 Python 模板工具,專為快速展現(xiàn)而設(shè)計的(與 Jinja2 不同)。Reddit 已經(jīng)使用 Mako 來展現(xiàn)他們的網(wǎng)頁,它同時也是 Pyramid 和 Pylons 等 web 框架的默認(rèn)模板語言。它相當(dāng)簡單且易于使用。你可以使用幾行代碼來設(shè)計模板;支持 Python 2.x 和 3.x,它是一個功能強(qiáng)大且功能豐富的工具,具有良好的文檔,這一點(diǎn)我認(rèn)為是必須的。其功能包括過濾器、繼承、可調(diào)用塊和內(nèi)置緩存系統(tǒng),這些系統(tǒng)可以被大型或復(fù)雜的 web 項目導(dǎo)入。
Jinja2
Jinja2 是另一個快速且功能全面的選項,可用于 Python 2.x 和 3.x,遵循 BSD 許可證。Jinja2 從功能角度與 Mako 有很多重疊,因此對于新手來說,你在兩者之間的選擇可能會歸結(jié)為你喜歡的格式化風(fēng)格。Jinja2 還將模板編譯為字節(jié)碼,并具有 HTML 轉(zhuǎn)義、沙盒、模板繼承和模板沙盒部分的功能。其用戶包括 Mozilla、 SourceForge、 NPR、 Instagram 等,并且還具有強(qiáng)大的文檔。與 Mako 在模板內(nèi)部使用 Python 邏輯不同的是,Jinja2 使用自己的語法。
Genshi
Genshi 是我會提到的第三個選擇。它是一個 XML 工具,具有強(qiáng)大的模板組件,所以如果你使用的數(shù)據(jù)已經(jīng)是 XML 格式,或者你需要使用網(wǎng)頁以外的格式,Genshi 可能成為你的一個很好的解決方案。HTML 基本上是一種 XML(好吧,不是精確的,但這超出了本文的范圍,有點(diǎn)賣弄學(xué)問了),因此格式化它們非常相似。由于我通常使用的很多數(shù)據(jù)都是 XML 或其他類型的數(shù)據(jù),因此我非常喜歡使用我可以用于多種事物的工具。
發(fā)行版目前僅支持 Python 2.x,盡管 Python 3 支持存在于主干中,但我提醒你,它看起來并沒有得到有效的開發(fā)。Genshi 遵循 BSD 許可證提供。
示例
因此,在上面的假設(shè)示例中,我不會每次寫新主題時都更新 HTML 文件,而是通過編程方式對其進(jìn)行更新。我可以創(chuàng)建一個模板,如下所示:
My Python articles These are some of the things I have written about Python:
%for topic in topics:- ${topic}
%endfor
然后我可以使用我的模板庫來迭代每個主題,比如使用 Mako,像這樣:
from mako.template import Templatemytemplate = Template(filename='template.txt')print(mytemplate.render(topics=("Python GUIs","Python IDEs","Python web scrapers")))
當(dāng)然,在現(xiàn)實(shí)世界的用法中,我不會將這些內(nèi)容手動地列在變量中,而是將它們從外部數(shù)據(jù)源(如數(shù)據(jù)庫或 API)中提取出來。
這些不是僅有的 Python 模板引擎。如果你正在開始創(chuàng)建一個將大量使用模板的新項目,那么你考慮的可能不僅僅是這三種選擇。在 Python 維基上查看更全面的列表,以獲得更多值得考慮的項目。
名稱欄目:關(guān)于3個Python模板庫的比較
標(biāo)題URL:http://m.fisionsoft.com.cn/article/dhisods.html


咨詢
建站咨詢
