利用模板引擎,我们不需要再把 HTML 代码写在 Rust 代码中了,而是将其独立保存为*.html
文件。既方便维护,也有利用开发。
创建模板文件
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<meta charset="UTF-8" />
<title>axum.rs</title>
</head>
<body>
<p>你好,<strong>{{ name }}</strong></p>
</body>
</html>
创建模板对应的结构体
为了让模板与 rust 相关联,我们需要对刚刚创建的templates/index.html
模板创建一个对应的结构体:
#[derive(Template)]
#[template(path = "index.html")]
pub struct IndexTemplate {
pub name: String,
}
其中
-
#[derive(Template)]
:是让我们的结构体实现askama::Template
,这样就可以方便调用模板的方法。
使用模板
async fn index() -> Result<Html<String>, String> {
let name = String::from("axum中文网");
let tpl = IndexTemplate { name };
let html = tpl.render().map_err(|err| err.to_string())?;
Ok(Html(html))
}
更多模板指令
我们只使用了一个指令,就是将变量显示在页面上。askama 支持非常多的模板指令,比如:for
、match
、过滤器
、if
、子模板
、block
等。完整内容你可以在askama 文档中查看。
过滤器
askama 提供了一些实用的过滤器,比如 safe
:直接显示 HTML 代码,而不是显示转义过后的代码。更多过滤器,你可以在这里找到。
本章讨论模板引擎,你可以在代码库中找到完整代码。