21个稳定版本

2.1.2 2024年8月9日
2.1.1 2024年7月31日
2.0.2 2024年6月11日
1.0.21 2024年4月24日
1.0.10 2023年11月10日

#151命令行工具

Download history 213/week @ 2024-04-29 139/week @ 2024-05-06 46/week @ 2024-05-13 57/week @ 2024-05-20 22/week @ 2024-05-27 40/week @ 2024-06-03 187/week @ 2024-06-10 46/week @ 2024-06-17 37/week @ 2024-06-24 205/week @ 2024-07-01 9/week @ 2024-07-08 2/week @ 2024-07-15 136/week @ 2024-07-22 387/week @ 2024-07-29 131/week @ 2024-08-05 39/week @ 2024-08-12

693 每月下载次数

Apache-2.0

720KB
14K SLoC

minijinja-cli

Build Status License Crates.io rustc 1.61.0

minijinja-cli 是一个命令行可执行文件,它使用 MiniJinja 将Jinja2模板直接从命令行渲染到stdout。

您可以使用Shell安装程序自动安装二进制文件

curl -sSfL https://github.com/mitsuhiko/minijinja/releases/latest/download/minijinja-cli-installer.sh | sh

或手动下载二进制文件

您也可以使用 cargo 编译它

cargo install minijinja-cli

然后像这样运行

minijinja-cli my-template.j2 data.json

参数

minijinja-cli 有两个位置参数用于引用文件。其中任何一个都可以设置为 - 以从stdin读取。这是模板的默认设置,但一次只能设置一个stdin。

  • [TEMPLATE]:第一个参数是模板的文件名。如果没有提供,则默认为 -,这意味着它从stdin加载模板。
  • [DATA]:第二个参数是数据文件的路径。这是一个包含应渲染的输入变量的文件。支持各种文件格式。当从 stdin 读取数据时,必须指定 --format,因为自动检测基于文件扩展名。

选项

  • -f, --format <FORMAT>:这定义了数据文件的输入格式。默认是 auto,它会根据文件扩展名自动检测。有关支持的格式,请参阅下一节。
  • ---autoescape <MODE>:选择一个自动转义模式。默认是自动检测(auto),基于文件扩展名。选项包括 none 禁用转义,html 启用 HTML/XML 转义,json 启用 JSON(兼容 YAML)序列化。
  • -D--define <EXPR>:从一个表达式定义一个变量。支持的格式有 NAME 用于定义变量 NAME,其值为 trueNAME=VALUE 用于定义变量 NAME,其值为字符串 VALUENAME:=VALUE 用于将变量 NAME 设置为 YAML 解释的值 VALUE。当 YAML 支持未启用时,:= 只支持 JSON。
  • --strict:启用严格模式。在渲染时,未定义的变量将引发错误。
  • --no-include:禁止从文件系统包含或扩展模板。
  • --no-newline:不输出尾部换行。
  • --trim-blocks:启用 trim_blocks 标志。
  • --lstrip-blocks:启用 lstrip_blocks 标志。
  • --py-compat:启用改进的 Python 兼容性。启用此选项将添加方法,如 dict.keys 以及其他一些方法。
  • ---syntax <PAIR>:更改一个语法功能(feature=value)[可能的功能:block-startblock-endvariable-startvariable-endcomment-startcomment-endline-statement-prefixline-statement-comment]
  • --safe-path <PATH>:仅允许从此路径包含。可以使用多次。
  • --env:将环境变量传递到模板中的变量 ENV
  • -E--expr <EXPR>:不是渲染模板,而是评估一个表达式。结果的处理由 --expr-out 决定。
  • --expr-out <MODE>:设置表达式输出模式。默认是printprint仅打印表达式输出,json将其作为JSON序列化值输出,status隐藏输出但报告退出状态。true转换为0,而false转换为1。数值结果保持不变。
  • --fuel <AMOUNT>:设置发动机的最大燃料。当发动机耗尽燃料时将报错。
  • --repl:为MiniJinja表达式启动交互式读取-评估-打印循环。
  • --dump <KIND>:打印模板的内部结构。可能的选项包括tokens查看分词器的输出,ast查看解析后的AST,以及instructions检查编译的字节码。
  • -o--output <FILENAME>:将输出写入文件名而不是标准输出。
  • --select <SELECTOR>:选择输入数据的路径。
  • --generate-completion <SHELL>:为给定的shell生成补全。
  • --version:打印版本。
  • --help:打印帮助。

格式

以下格式被支持

  • json (*.json*.json5):JSON5(如果未编译JSON5,则为JSON)
  • yaml (*.yaml*.yml):YAML
  • toml (*.toml):TOML
  • cbor (*.cbor):CBOR
  • querystring (*.qs):URL编码的查询字符串
  • ini (*.ini*.config*.properties):纯文本INI文件

对于大多数格式,它们在模板上下文中的映射非常直接。目前唯一的例外是INI文件,其中部分是强制性的。如果键放置在未命名的部分中,则第二个部分将重命名为default。您可以使用--select来隐式创建一个部分。

minijinja-cli template.j2 input.ini --section default

请注意,并非所有格式都支持所有输入类型。例如,查询字符串和INI主要只支持字符串。

选择

默认情况下,输入文件会直接作为上下文。但是,您也可以选择文件的一部分。例如,如果您有一个所有变量都放在 values 部分的 TOML 文件,您通常需要这样引用值

{{ values.key }}

然而,如果您使用 --select=values 调用 minijinja-cli,您可以直接引用键

{{ key }}

示例

使用字符串和整数变量渲染模板

minijinja-cli template.j2 -D name=World -D count:=3

使用标准输入中的变量渲染模板

echo '{"name": "World"}' | minijinja-cli -f json template.j2 -

评估表达式并打印结果

minijinja-cli --env -E "ENV.HOME or ENV.USERPROFILE"

交互式编程环境 (REPL)

minijinja-cli --repl -D name=World
MiniJinja Expression REPL
Type .help for help. Use .quit or ^D to exit.
>>> name|upper
"WORLD"
>>> range(3)
[0, 1, 2]

行为

模板可以扩展其他模板或包含它们。路径相对于父模板。因此,当您位于 foo/bar.j2 并包含 utils.j2 时,它将加载 foo/utils.j2。出于安全原因,可以使用 --no-include 禁用模板的包含。

所有来自 MiniJinja 和 minijinja-contrib 的过滤器和函数都可用。

在失败时,堆栈跟踪将渲染到标准错误。

repl 模式允许您执行 MiniJinja 表达式。

编译时功能

默认情况下,所有功能都已启用。以下功能可以在默认值关闭时显式选择

  • yaml:启用 YAML 支持
  • toml:启用 TOML 支持
  • cbor:启用 CBOR 支持
  • json5:启用 JSON5 支持(而不是 JSON)
  • querystring:启用查询字符串支持
  • ini:启用 INI 支持
  • datetime:启用日期和时间过滤器以及 now() 函数
  • completions:启用补全的生成
  • unicode:启用 Unicode 标识符支持
  • contrib:启用基于 minijinja_contrib 的功能,包括 --py-compat 标志

此外,如果在编译期间设置了 ASSET_OUT_DIR 环境变量,则将生成手册页(和可选的补全)到该文件夹。

赞助商

如果您喜欢这个项目并觉得它很有用,您可以通过 成为赞助商

依赖关系

~4–15MB
~201K SLoC