rust视图模板库askama的使用

字号+ 编辑: 种花家 修订: 种花家 来源: 原创 2023-09-11 我要说两句(0)

一个很好用的web组件。

准备工作:

先在项目根目录的Cargo.toml文件中添加依赖记录

[dependencies.askama]
version = "0.11.1"

注意, 你的项目里面有src文件夹, 也应该在同级别新建一个名叫templates的文件夹, 用以放置.html视图。

在main.rs或者随便找个加载公共方法的文件引入一个公共结构体:

struct HtmlTemplate<T>(T);

impl<T> IntoResponse for HtmlTemplate<T>
    where
        T: Template,
{
    fn into_response(self) -> Response {
        match self.0.render() {
            Ok(html) => Html(html).into_response(),
            Err(err) => (
                StatusCode::INTERNAL_SERVER_ERROR,
                format!("渲染视图失败: {}", err),            )
                .into_response(),
       }
    }
}

准备工作完成...

1900f7dfeaa58b3f7c3907046dd1e39a.gif

如何摆放视图变量和使用视图

在项目中找一个控制器文件,如果你的项目压根没有mvc的概念, 哪怕就一个main.rs, 也没关系, 定义一个结构体, 代码如下。

#[derive(Template)]
#[template(path = "somepage.html")]
struct TplSomepage {
    title: String,
    description: String,
    company_name: String,
}

根据编译器的提示, 结构体的命名写法有点要求, 不然报bug, 鄙人在这里命名为TplXxxXxx

那么在项目根目录下的templates文件夹底下你需要新建一个文件叫somepage.html, 就和上方的结构体关联上了。

接下来,在控制器里写一个方法(请原谅我mvc写惯了, 写rust也这个鸟味儿):

pub async fn hey_shit() -> impl IntoResponse {

    let title = String::from("标题");
    let description = String::from("描述");
    let company_name = String::from("某某公司");


    let template = TplSomepage {
        title,
        description,
        company_name,
    };

    HtmlTemplate(template)
}

至于视图变量的放置, 和之前处理python/php的视图类似:

{{ 变量名 }}


阅完此文,您的感想如何?
  • 有用

    0

  • 没用

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • 在rust/axum框架中操作redis

  • rust编译新的wasm项目操作流程(原文: 编译 Rust 为 WebAssembly)

  • axum框架当中获取请求header, 和获取header指定字段的方法

  • 在M1 M2芯片的苹果电脑上编译intel x86的rust库

我要说说
网上宾友点评