首页 > 其他分享 >jinja2 通过Template. make_module 进行动态macro 创建以及macro 方法调用

jinja2 通过Template. make_module 进行动态macro 创建以及macro 方法调用

时间:2024-03-26 15:35:21浏览次数:20  
标签:调用 macro make module jinja2 template

实际属于一个小技巧,可以实现比较灵活的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/

标签:调用,macro,make,module,jinja2,template
From: https://www.cnblogs.com/rongfengliang/p/18079461

相关文章

  • 【linux】Centos7 手动编译安装 cmake-3.28.4
    简介1、移除原来的cmake版本yumremovecmake-y2、下载cmake-3.28.4.tar.gz安装包并解压wgethttps://cmake.org/files/v31、移除老版本cmake版本并安装依赖包yumremovecmake-y;yuminstall-ygccgcc-c++makeautomakeopensslopenssl-devel2、下载cmake-3.7.2.tar.gz......
  • module的定义及端口的作用
    模型功能module是verilog中层次划分的基本单元通过module之间的调用,可以实现硬件描述层次的提高端口列表则是module的输入输出,和数字电路的走线连接等效基于module的不断地叠加,verilog可以完成从底层的与或门到复杂数字系统的逐步设计模型框图//moduledefinemoduleA#(......
  • makefile编译第二讲
    更多精彩内容在公众号。关注公众号,加v,免费送你两本makefile电子书。轻松掌握makefileGNU 的 make 很强大, 它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的 make 会自动识别,并自己推导命令只要 make ......
  • cmake之find_library使用问题
    附上工程源码demo工程PS:这个工程用于导出库CMakeLists.txtcmake_minimum_required(VERSION3.5)project(demoLANGUAGESCXX)set(CMAKE_INCLUDE_CURRENT_DIRON)set(CMAKE_CXX_STANDARD11)set(CMAKE_CXX_STANDARD_REQUIREDON)add_library(demoSHAREDdemo.cpp......
  • B - Make Many Triangles
    原题链接题解1.我们可以用若干条直线把所有点串起来,串起来的要求是不同直线不共点,这样以每条直线上的两点为底,直线外另一点为顶点配对令最大的直线上的点数为k,如果n-k>=k/2+k%2,那么这条直线上的点一定可以被消除。否则不行就变成了若干集合彼此相消,当最大集合大小超过剩余集......
  • ModuleNotFoundError: No module named ‘matplotlib‘ 一系列解决办法
    编译器:pycharm,在导入matplotlib包时出现ModuleNotFoundError:Nomodulenamed‘matplotlib‘的报错问题一:如何下载matplotlib包打开PyCharm,点击File->Settings,点击弹出界面的“+”号:输入:matplotlib ,点下面的安装,等待一段时间,安装失败,并提示在终端进行操作 进入终......
  • .NET Emit 入门教程:第三部分:构建模块(Module)
    前言:在这一部分中,我们将深入讨论动态程序集中模块的概念以及如何构建和管理模块。1、模块的概念:模块是动态程序集中的基本单位,它类似于一个独立的代码单元,可以包含类型、方法、字段等成员。在动态程序集中,模块扮演着组织代码和实现代码复用的关键角色。它们允许开发人员将相......
  • QMake和CMake
     区别和相同点       qmake和cmake两者都用来构建系统,都生成一个Makefile,该文件由make读取以构建项目,告诉编译器和链接器该做什么,以创建可执行文件(或动态或静态库)。       qmake专注于使用Qt的项目,QtCreator可以轻松生成项目文件(适合初学者),并由QtCreator支......
  • MakeFile学习
    Makefile学习Makefile的规则基本规则target...:prerequisites...<tab缩进>command<tab缩进>...<tab缩进>...target是一个目标文件,可以使ObjectFile,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续‘“伪目标”中会有叙述。prerequisites就是要生成t......
  • 尝试 `npm install @xxxxx` ,或者添加一个包含 `declare module ‘xxxxx‘;` 的新声明(.
    我们在vue3+ts的项目中,有时候安装插件,在导入文件使用的时候会出现上面的问题,这是因为插件库中并没有ts的.d.ts类型的声明文件,所以我们在导入使用的时候一直报警告,无法使用。要解决这个问题,根据他的提示有两种解决方案。方案一:根据提醒安装对应的ts类型插件即可。方案二:......