82 个版本 (29 个稳定版)
2.1.2 | 2024年8月9日 |
---|---|
2.1.1 | 2024年7月31日 |
2.0.2 | 2024年6月11日 |
1.0.21 | 2024年4月24日 |
0.8.2 | 2021年11月8日 |
2 in 模板引擎
199,668 每月下载量
用于 160 个 Crates (100 直接)
665KB
13K SLoC
MiniJinja 是一个基于 Python 的 Jinja2 模板引擎语法定义和行为,为 Rust 设计的强大而最小依赖的模板引擎。
它在 serde
上实现,只将其作为单个必需依赖项。它支持从 Jinja2 的一系列功能,包括继承、过滤器等。目标是能够在 Rust 程序中使用一些模板,而不用担心为小问题引入复杂的依赖项。此外,它还试图不要重新发明轮子,而是保持与现有技术的兼容性,以利用现有的编辑器集成生态系统。
$ cargo tree
minimal v0.1.0 (examples/minimal)
└── minijinja v2.1.2 (minijinja)
└── serde v1.0.144
此外,minijinja 还可以作为(可选预编译的)命令行可执行文件提供,称为 minijinja-cli
$ curl -sSfL https://github.com/mitsuhiko/minijinja/releases/latest/download/minijinja-cli-installer.sh | sh
$ echo "Hello {{ name }}" | minijinja-cli - -Dname=World
Hello World
您可以在浏览器中在线 使用 MiniJinja
目标
- 良好的文档,紧凑的 API
- 最小依赖,合理的编译时间和 良好的运行时性能
- 尽可能接近 Jinja2
- 支持 表达式评估,允许将其用作 DSL
- 支持所有
serde
兼容类型 - 良好的测试
- 支持具有方法和动态属性的 动态运行时对象
- 描述性错误
- 编译成 WebAssembly
- 与 Python 兼容
- 附带方便的 CLI
- 实验性的 C 绑定
示例
示例模板
{% extends "layout.html" %}
{% block body %}
<p>Hello {{ name }}!</p>
{% endblock %}
从Rust调用
use minijinja::{Environment, context};
fn main() {
let mut env = Environment::new();
env.add_template("hello.txt", "Hello {{ name }}!").unwrap();
let template = env.get_template("hello.txt").unwrap();
println!("{}", template.render(context! { name => "World" }).unwrap());
}
用例和用户
以下是MiniJinja的一些有趣的开源用户和用例。示例链接直接指向使用引擎的位置,您可以查看其使用方式
-
HTML生成
-
结构生成
- Astral的Rye使用它来生成项目结构
- Maturin使用它来生成项目结构
- cargo-dist使用它来生成CI和项目配置
-
AI聊天模板
-
数据和处理
获取帮助
如果您在使用MiniJinja时遇到困难,有建议或需要帮助,您可以使用GitHub讨论。
相关项目
- minijinja-autoreload:提供环境自动重新加载功能
- minijinja-embed:提供将模板嵌入二进制文件的实用程序
- minijinja-contrib:提供针对核心的特定额外实用程序
- minijinja-py:使MiniJinja可用于Python
- minijinja-cli:一个命令行实用程序。
- minijinja-cabi:MiniJinja的C绑定。
类似项目
这些是与Rust相关的模板引擎
- Askama:Jinja启发,类型安全,需要模板预编译。在部分语法上与Jinja有显著差异。
- Tera:Jinja启发,动态,与Jinja有差异。
- TinyTemplate:具有来自Jinja和Handlebars语法灵感的最小脚本的模板引擎。
- Liquid:Rust的Liquid模板实现。Liquid受到了Django的启发,而Jinja则从Django中获得了灵感。
从MiniJinja 1.x升级
MiniJinja有两个主要版本,目前都在维护。大多数用户应升级到2.x版本,该版本的对象系统有了很大改进。但是,如果您以前使用过动态对象,升级可能相当复杂。有关升级信息,请参阅UPDATING,其中包含两个引擎版本之间变化的示例指南。
要查看MiniJinja 1.x的示例和代码,您可以浏览minijinja-1.x分支。
赞助商
如果您喜欢这个项目并觉得它很有用,您可以成为赞助商。
许可证和链接
- 文档
- 讨论
- 示例
- 问题追踪器
- MiniJinja游乐场
- 许可证:Apache-2.0
依赖项
~0.1–9.5MB
~60K SLoC