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

How to validate Jinja syntax without variable interpolation

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

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

由于您关心格式正确的模板,而不关心变量是否可用,所以应该很容易做到:

#!/usr/bin/env python
# filename: check_my_jinja.py
import sys
from jinja2 import Environment

env = Environment()
with open(sys.argv[1]) as template:
    env.parse(template.read())

或者遍历所有模板的东西

#!/usr/bin/env python
# filename: check_my_jinja_recursive.py
import sys
import os
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('./mytemplates'))
templates = [x for x in env.list_templates() if x.endswith('.jinja2')]
for template in templates:
    t = env.get_template(template)
    env.parse(t)

如果您的语法不正确,您将得到 TemplateSyntaxError

因此您的预提交挂钩可能看起来像

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