Validation 如何在没有变量插值的情况下验证Jinja语法

Validation 如何在没有变量插值的情况下验证Jinja语法,validation,syntax,jinja2,pre-commit-hook,Validation,Syntax,Jinja2,Pre Commit Hook,我没有成功地找到一个好的预提交钩子,我可以用它来验证Jinja2格式的文件是否格式良好,而不需要尝试替换变量。目标是,如果文件格式良好,则返回shell代码为零,而不考虑变量是否可用,否则返回1。您可以在Jinja本身中执行此操作,您只需要编写一个脚本来读取和解析模板 由于您只关心格式良好的模板,而不关心变量是否可用,因此应该很容易做到: #/usr/bin/env python #文件名:检查\u my\u jinja.py 导入系统 来自jinja2导入环境 env=Environment(

我没有成功地找到一个好的预提交钩子,我可以用它来验证Jinja2格式的文件是否格式良好,而不需要尝试替换变量。目标是,如果文件格式良好,则返回shell代码为零,而不考虑变量是否可用,否则返回1。

您可以在Jinja本身中执行此操作,您只需要编写一个脚本来读取和解析模板

由于您只关心格式良好的模板,而不关心变量是否可用,因此应该很容易做到:

#/usr/bin/env python
#文件名:检查\u my\u jinja.py
导入系统
来自jinja2导入环境
env=Environment()
以open(sys.argv[1])作为模板:
parse(template.read())
或者在所有模板上迭代的东西

#/usr/bin/env python
#文件名:检查\u my\u jinja\u recursive.py
导入系统
导入操作系统
从jinja2导入环境,FileSystemLoader
env=Environment(loader=FileSystemLoader('./mytemplates'))
templates=[x代表环境列表中的x_templates(),如果x.endswith('.jinja2')]
对于模板中的模板:
t=环境获取模板(模板)
环境解析(t)
如果语法不正确,则会出现
TemplateSyntaxError

所以你的预提交钩子看起来像

python check_my_jinja.py template.jinja2
python check_my_jinja_recursive.py /dir/templates_folder

递归版本不太有效,因为
f
是一个文件名列表。这里有一种递归运行常规版本的方法:
find-名称“*.j2”| xargs-I@python check_my_jinja.py