1个不稳定版本
1.0.12 |
|
---|---|
0.0.2 | 2024年4月4日 |
82 在模板引擎 中
用于 2 个crate(通过 harper)
635KB
12K SLoC
MiniJinja 是一个强大但依赖项最小的模板引擎,适用于Rust,其语法和行为基于Python的 Jinja2 模板引擎。
它基于 serde
实现,并且只有一个必需的依赖项。它支持 Jinja2 的一系列功能,包括继承、过滤器等。目标是能够在Rust程序中使用一些模板,而无需担心引入复杂的依赖项来解决小问题。此外,它还试图不要重新发明轮子,而是保持与现有技术的兼容性,以利用现有的编辑器集成生态系统。
$ cargo tree
minimal v0.1.0 (examples/minimal)
└── minijinja v1.0.16 (minijinja)
└── serde v1.0.144
您可以在浏览器中的 MiniJinja 在线游乐场 中尝试 MiniJinja,该游乐场由 MiniJinja 的 WASM 版本提供支持。
目标
- 良好的文档,紧凑的API
- 最小依赖项,合理的编译时间和 良好的运行时性能
- 尽可能接近 Jinja2
- 支持 表达式评估,允许将其用作 DSL
- 支持所有与
serde
兼容的类型 - 经过良好测试
- 支持 动态运行时对象,具有方法和动态属性
- 描述性错误
- 编译为WebAssembly
- 与Python兼容
- 附带方便的 CLI
示例模板
{% extends "layout.html" %}
{% block body %}
<p>Hello {{ name }}!</p>
{% endblock %}
API
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
时遇到困难,有建议或需要帮助,您可以使用 GitHub 讨论区。
相关Crate
- minijinja-autoreload:提供环境自动重新加载功能
- minijinja-embed:提供将模板嵌入二进制文件的实用工具
- minijinja-contrib:提供针对核心过于特定的额外实用工具。
- minijinja-py:使 MiniJinja 可在 Python 中使用。
- minijinja-cli:一个命令行实用工具。
类似项目
以下是与 Rust 相关的模板引擎
- Askama:受 Jinja 启发,类型安全,需要模板预编译。部分 Jinja 语法有显著差异。
- Tera:受 Jinja 启发,动态,与 Jinja 有所不同。
- TinyTemplate:最小内存占用模板引擎,语法从 Jinja 和 Handlebars 吸取灵感。
- Liquid:Rust 的 Liquid 模板实现。Liquid 受 Django 启发,而 Jinja 则从 Django 中获得灵感。
赞助商
如果您喜欢这个项目并觉得它很有用,您可以成为赞助商。
许可和链接
依赖关系
~0.1–1MB
~18K SLoC