如何获取网页端编辑的模板内调用的函数、类及参数列表?
获取网页模板中的类、函数及参数列表的方法
1. 利用模板引擎的AST解析能力
不同模板引擎都支持将模板解析为抽象语法树(AST),通过遍历AST可以精准提取类、函数和参数:
- Jinja2:用官方库的解析方法遍历节点,识别函数调用和类引用:
from jinja2 import Environment template_content = """你的模板内容""" ast = Environment().parse(template_content) def traverse_ast(node): # 递归遍历子节点 if hasattr(node, 'nodes'): for subnode in node.nodes: traverse_ast(subnode) # 识别函数调用 elif node.__class__.__name__ == 'Call': func_name = getattr(node.node, 'name', str(node.node)) args = [str(arg) for arg in node.args] print(f"函数调用: {func_name}, 参数: {args}") # 识别类/变量引用 elif node.__class__.__name__ == 'Name': print(f"引用对象: {node.name}") traverse_ast(ast)
- Handlebars:使用官方解析库生成AST,从
CallExpression节点提取Helper函数和参数;Vue模板则用@vue/compiler-sfc解析单文件组件,遍历AST的表达式节点获取方法信息。
2. 从渲染上下文反向提取
如果能拿到模板渲染时传入的上下文对象,直接遍历即可获取所有可用的类和函数:
- 比如Python后端渲染Jinja2模板时,用
inspect模块提取函数签名:
import inspect def extract_context_info(context): for name, obj in context.items(): if inspect.isfunction(obj) or inspect.isclass(obj): sig = inspect.signature(obj) print(f"{name}: {sig}") # 传入模板渲染时的上下文字典 extract_context_info(context)
3. 静态分析工具或正则辅助
- 用正则匹配模板中的函数调用格式(以Jinja2为例),快速提取基础信息(精度有限,适合简单模板):
{{\s*(\w+)\((.*?)\)\s*}}
- 使用模板专用的静态分析工具,比如Jinja2的
jinja2-lint扩展,或自定义脚本结合AST解析,比正则更准确。
4. 前端模板的浏览器端调试
如果是前端运行时渲染的模板(如Handlebars),在浏览器控制台直接访问引擎注册的函数集合:
// 遍历Handlebars所有Helper函数 for (const [name, func] of Object.entries(Handlebars.helpers)) { console.log(`${name}: ${func.toString()}`); }
内容的提问来源于stack exchange,提问作者Bohdan
相关产品推荐
相关产品推荐

