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.交流群: 2702237 13835667

相關課文
  • 在rust/axum框架中操作redis

  • rust編譯新的wasm項目操作流程(原文: 編譯 Rust 爲 WebAssembly)

  • axum框架當中獲取請求header, 和獲取header指定字段的方法

  • 在M1 M2芯片的蘋果電腦上編譯intel x86的rust庫

我要說說
網上賓友點評