jinja2 通过Template. make_module 进行动态macro 创建以及macro 方法调用
实际属于一个小技巧,可以实现比较灵活的jinja2 扩展,是从dbt 对于macro 的处理部分学习到的
参考代码
- app.py
from jinja2 import Environment
env = Environment()
# 定义macro 的内容
macro_template = """
{% macro mydemo(name, age) -%}
{{name}} -----{{age}}
{%- endmacro %}
"""
# 通过string 模式的模版加载
template = env.from_string(macro_template)
context = None
# template.make_module 创建模块
module = template.make_module(vars=context, shared=False)
# module 会包含一个macro 名称的属性(是一个方法)
macro_func = module.__dict__['mydemo']
# 调用方法
info = macro_func('zhangsan', 18)
print(info)
说明
以上技巧在dbt 中的用途还是比较大的,是一个值得使用的小技巧
参考资料
https://jinja.palletsprojects.com/en/3.0.x/api/#high-level-api
https://jinja.palletsprojects.com/en/3.1.x/templates/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-03-26 hilla 2.0 发布
2022-03-26 minio 4*4 集群 故障测试
2022-03-26 nocodb minio 集成试用
2022-03-26 nocodb 核心入口依赖
2022-03-26 minio 纠删码测试
2021-03-26 使用外部db 加速dremio 查询
2021-03-26 开发一个cube.js cratedb driver