論如何自己寫一個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>
未完待續
相關文章
- 自己用C語言寫的一個模擬退火演算法C語言演算法
- 一文搞懂如何自己寫一個Python庫Python
- 如何為使用 Python 語言而辯論Python
- 用 PHP 寫一個"程式語言"PHP
- 50行Python程式碼寫一個語言檢測器Python
- 如何自己寫一個網路爬蟲爬蟲
- 如何寫一個自己的渣渣PHP框架(4)PHP框架
- Cython,一個簡化 Python 編寫 C 擴充套件的語言Python套件
- 手寫一個自己的PromisePromise
- 如何寫一個屬於自己的查成績appAPP
- 教你在 C 語言上編寫自己的協程
- 用Go語言寫一個Windows的外掛(上)GoWindows
- 如何選擇適合自己的程式語言
- 分享自己寫的一個 Python 的 JSON 轉 Model 庫PythonJSON
- Python,寫一個簡單的屬於自己的『BaseEnum』類Python
- [Go語言寫介面]一、使用xcgui完成go語言第一個軟體介面GoGUI
- 自己寫一個ProviderIDE
- 用 C 語言寫一個簡單的 Unix Shell(1)
- 用 C 語言寫一個簡單的 Unix Shell(2)
- C語言爬蟲程式編寫的爬取APP通用模板C語言爬蟲APP
- 如何開始定製你自己的大型語言模型模型
- 如何封裝一個flutter的多語言plugin封裝FlutterPlugin
- C語言中如何寫斷言C語言
- Java、Python如何選?哪個程式語言好?JavaPython
- 自己寫一個mvc框架吧(一)MVC框架
- FSE論文寫作 | 1 寫作模板
- Julia加入TPU,這是一個靠自己也要融入機器學習的程式語言機器學習
- 用自己的程式語言實現了一個網站(增強版)網站
- 如何選擇一款自己喜歡又容易上手的程式語言
- 用 C 語言編寫一個簡單的垃圾回收器
- 分享一個自己寫的C# SqlHelperC#SQL
- 編寫一個簡單的JavaScript模板引擎JavaScript
- 自己寫一個Babel外掛Babel
- 自己動手寫一個 SimpleVueVue
- 如何用 ANTLR 4 實現自己的指令碼語言?指令碼
- Yargs寫一個新建模板工具
- django 模板語言的註釋操作Django
- 想自己寫一個自用的部落格系統,到哪裡弄看得過去的前端模板前端