エラーメッセージはあなたが知る必要があるすべてを語っていますか? Template::render
のためにドキュメントをチェックアウト:
fn render<S, T>(name: S, context: &T) -> Template
where S: AsRef<str>,
T: Serialize,
このMCVEは、問題を示しています
のsrc/main.rs
#![feature(plugin)]
#![plugin(rocket_codegen)]
extern crate rocket;
extern crate rocket_contrib;
use rocket_contrib::Template;
#[get("/")]
fn index() -> Template {
let serialized = "hello".to_string();
Template::render("index", &serialized)
}
fn main() {
rocket::ignite().mount("/", routes![index]).launch();
}
Cargo.toml
[dependencies]
rocket = "0.1.6"
rocket_codegen = "0.1.6"
[dependencies.rocket_contrib]
version = "0.1.6"
features = ['tera_templates']
テンプレート/ index.html.tera
<html />
ほとんどのテンプレートエンジンは、値に名前をマップするデータ構造に対して動作します。多くの場合、これはHashMap
のような単純なものですが、Rocketではシリアライズ可能なものを渡すことができます。これはです。は構造体を渡すことができますが、は名前を値にマップしないようにすることもできます。
- が
HashMap
(または多分BTreeMap
)の値を作成します。 次の2つの選択肢があります。
- 構造体の
Serialize
を実装し、その中を通過し
ここで最初のオプションです:。
use std::collections::HashMap;
let mut serialized = HashMap::new();
serialized.insert("greeting", "hello");
Template::render("index", &serialized)
はなぜあなたが導出され、 'User'ため、手動で実行する' Serialize'?派生シリアライゼーションを使用するだけで、私が理解できる限り動作するはずです。 – belst
私はそれが必要ないと思った。 ただし、コンパイル時に必要です。 1.「ユーザにシリアル化する」とコメントしてください。 2. let serialize = serde_json :: to_string(&query).unwrap();「 」をコメントアウトします。'$ cargo run' 'テンプレート::レンダリング( "インデックス"、&クエリ)// 'mlde :: models :: User''のために' serde :: ser :: Serialize '属性が実装されていません –
@belstあなたが気にしないなら教えてください。 –