Nargo Template
Nargo 模板引擎管理库,提供统一的模板渲染接口,支持多种模板引擎。
功能特性
- 统一的模板渲染接口
- 内置 Handlebars 模板引擎支持
- 可扩展的自定义模板引擎支持
- 模板目录自动扫描和加载
- 同步和异步渲染支持
支持的模板引擎
Handlebars
- 文件扩展名:
.hbs
- 流行的 JavaScript 模板语言
- 支持条件、循环、辅助函数等
DejaVu
- 文件扩展名:
.dj
- 编译期零成本抽象
- 高性能模板引擎
自定义
- 文件扩展名:
.tpl
- 通过实现
TemplateRenderer trait 支持
快速开始
基本使用
use nargo_template::{TemplateManager, TemplateEngine};
use serde_json::json;
fn main() -> anyhow::Result<()> {
let mut manager = TemplateManager::new();
let renderer = manager.get_renderer_mut(TemplateEngine::Handlebars).unwrap();
renderer.register_template("greeting", "Hello, {{name}}!")?;
let context = json!({"name": "World"});
let result = manager.render(TemplateEngine::Handlebars, "greeting", &context)?;
assert_eq!(result, "Hello, World!");
Ok(())
}
从目录加载模板
use nargo_template::{TemplateManager, TemplateEngine};
fn main() -> anyhow::Result<()> {
let mut manager = TemplateManager::new();
manager.add_template_dir("./templates");
manager.load_templates(TemplateEngine::Handlebars)?;
Ok(())
}
实现自定义模板引擎
use async_trait::async_trait;
use nargo_template::TemplateRenderer;
use anyhow::Result;
use std::path::Path;
struct MyRenderer {
}
#[async_trait]
impl TemplateRenderer for MyRenderer {
fn render(&self, template_name: &str, context: &serde_json::Value) -> Result<String> {
Ok("rendered content".to_string())
}
fn register_template(&mut self, name: &str, content: &str) -> Result<()> {
Ok(())
}
fn register_template_file<P: AsRef<Path>>(&mut self, name: &str, path: P) -> Result<()> {
Ok(())
}
fn register_templates_from_dir<P: AsRef<Path>>(
&mut self,
dir: P,
extension: Option<&str>,
) -> Result<()> {
Ok(())
}
}
let mut manager = TemplateManager::new();
manager.register_renderer(TemplateEngine::Custom, Box::new(MyRenderer {}));
API 文档
TemplateManager
模板管理器,负责管理多个模板引擎的渲染器。
方法
new() - 创建新的模板管理器
register_renderer(engine, renderer) - 注册自定义渲染器
get_renderer(engine) - 获取渲染器
get_renderer_mut(engine) - 获取可变渲染器
add_template_dir(dir) - 添加模板目录
load_templates(engine) - 从已注册的目录加载模板
render(engine, template_name, context) - 渲染模板
render_async(engine, template_name, context) - 异步渲染模板
TemplateRenderer trait
模板渲染器 trait,所有模板引擎都需要实现。
必需方法
render(template_name, context) - 渲染模板
register_template(name, content) - 注册模板
register_template_file(name, path) - 注册模板文件
register_templates_from_dir(dir, extension) - 从目录加载模板
可选方法
render_async(template_name, context) - 异步渲染模板(默认调用同步版本)
许可证
MIT