論如何自己寫一個Python的模板語言
論如何自己寫一個Python的模板語言
核心關鍵
exec(source[, globals[, locals]])
使用見 python3 exec函式
import re
html = "<h1>{{msg}}</h1>"
# 先分離普通字串和模板語句
tokens = re.split(r"({{.*?}})", html)
# ['<h1>', '{{msg}}', '</h1>']
# 拼接函式字串
"""
當tokens = ['<h1>', '{{msg}}', '</h1>']時
拼接一個函式字串, 如下所示
def render(context):
result = []
result.append('<h1>')
result.append(str(context['msg']))
result.append('</h1>')
return "".join(result)
"""
# 建立單行程式碼列表
func_code = []
func_code.append("def render(context):")
func_code.append(" result = []") # 注意縮排
# 依次新增
for token in tokens:
if not token:
# 空忽略
pass
if token.startswith("{{"):
# 表示為模板變數語句
func_code.append(f" result.append(str(context['{token[2:-2]}']))") # 2:-2去掉首位花括號
else:
# 普通字串
func_code.append(f" result.append({repr(token)})")
# 最後新增return語句
func_code.append(" return ''.join(result)")
# 使用exec執行func_code
namespace = {}
exec("\n".join(func_code), namespace) # 這時render函式就載入進namespace內了
# 呼叫render函式
context = {"msg": "Hello world!"} # 傳入的變數集
result = namespace['render'](context)
print(result)
# <h1>Hello world!</h1>
未完待續
相關文章
- 一文搞懂如何自己寫一個Python庫Python
- 自己用C語言寫的一個模擬退火演算法C語言演算法
- Cython,一個簡化 Python 編寫 C 擴充套件的語言Python套件
- 用 PHP 寫一個"程式語言"PHP
- 分享自己寫的一個 Python 的 JSON 轉 Model 庫PythonJSON
- 如何自己寫一個網路爬蟲爬蟲
- Python,寫一個簡單的屬於自己的『BaseEnum』類Python
- 教你在 C 語言上編寫自己的協程
- 手寫一個自己的PromisePromise
- 自己寫一個ProviderIDE
- [Go語言寫介面]一、使用xcgui完成go語言第一個軟體介面GoGUI
- 如何使用Typora寫出自己的第一個部落格
- Java、Python如何選?哪個程式語言好?JavaPython
- C語言爬蟲程式編寫的爬取APP通用模板C語言爬蟲APP
- 如何開始定製你自己的大型語言模型模型
- 如何封裝一個flutter的多語言plugin封裝FlutterPlugin
- 用自己的程式語言實現了一個網站(增強版)網站
- 如何選擇一款自己喜歡又容易上手的程式語言
- 學寫PEP,參與Python語言的設計Python
- 自己寫一個mvc框架吧(一)MVC框架
- 分享一個自己寫的C# SqlHelperC#SQL
- 自己寫一個vue的loading外掛Vue
- 自己寫一個Babel外掛Babel
- 自己寫的簡單的一個部落格
- django 模板語言的註釋操作Django
- 編寫一個簡單的JavaScript模板引擎JavaScript
- 使用golang+antlr4構建一個自己的語言解析器(二)Golang
- FSE論文寫作 | 1 寫作模板
- 想自己寫一個自用的部落格系統,到哪裡弄看得過去的前端模板前端
- Yargs寫一個新建模板工具
- Python語言最常見的8個基礎語句!Python
- 基礎入門: 編寫第一個 Go 語言程式Go
- NLP論文解讀:無需模板且高效的語言微調模型(上)模型
- 最近寫了一個demo,想看看java和go語言是怎麼寫的JavaGo
- 論如何在伺服器上部署一個自己的web前端專案伺服器Web前端
- 為什麼寫爬蟲用Python語言?爬蟲Python
- C語言通過.h標頭檔案引入自己寫的源程式C語言
- 自己寫一個mvc框架吧(五)MVC框架