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

标签 validation syntax jinja2 pre-commit-hook

我没有成功找到一个好的预提交钩子(Hook),我可以用它来验证 Jinja2 格式的文件是否格式正确,而无需尝试替换变量。目标是,如果文件格式正确,不考虑变量是否可用,则返回 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
所以你的预提交钩子(Hook)可能看起来像
python check_my_jinja.py template.jinja2
python check_my_jinja_recursive.py /dir/templates_folder

关于validation - 如何在没有变量插值的情况下验证 Jinja 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37939131/

相关文章:

Java Swing 相关字段验证

php - 在 Symfony 中出现第一个错误时停止对象属性验证有多漂亮?

validation - 如果命名空间存在,则无法在 JAXB 中验证 XML 的特定部分

c - 返回多维数组的 C 函数的签名

bash - Bash 中的单词拆分,IFS 设置为非空白字符

python - 模板文件更改时重新加载 Flask 应用程序

python解码/编码 hell (使用jinja2)

Javascript\Jquery 如何检测函数是否仍在运行?或者我可以 Hook 返回事件吗?

我可以在不为其中一个参数指定类型的情况下声明一个函数吗?

python - 如何删除 jinja 嵌套循环中的最后一项?