2017-02-06 8 views
-1

Dieselでデータベースから取得した値を表示し、Rocket.rsでHTMLとして提供したいとします。Dieselを使用して取得した値をRocket.rsのTeraテンプレートを使用して表示する方法

The sample code is here.

それは、のsrc/main.rs# [get ("/")]にDBからUser {id: 1, name: "yamada"}を受け取り、テンプレートでそれをレンダリングしようとします。

このエラーが返されます。

context isn't an object 

そしてcontextものです:

Error: Error rendering Tera template 'index': Failed to value_render 'index.html.tera': context isn't an object 
+0

はなぜあなたが導出され、 'User'ため、手動で実行する' Serialize'?派生シリアライゼーションを使用するだけで、私が理解できる限り動作するはずです。 – belst

+0

私はそれが必要ないと思った。 ただし、コンパイル時に必要です。 1.「ユーザにシリアル化する」とコメントしてください。 2. let serialize = serde_json :: to_string(&query).unwrap();「 」をコメントアウトします。'$ cargo run' 'テンプレート::レンダリング( "インデックス"、&クエリ)// 'mlde :: models :: User''のために' serde :: ser :: Serialize '属性が実装されていません –

+0

@belstあなたが気にしないなら教えてください。 –

答えて

0

エラーメッセージはあなたが知る必要があるすべてを語っていますか? 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ではシリアライズ可能なものを渡すことができます。これはです。は構造体を渡すことができますが、は名前を値にマップしないようにすることもできます。

  1. HashMap(または多分BTreeMap)の値を作成します。

    次の2つの選択肢があります。

  2. 構造体のSerializeを実装し、その中を通過し

ここで最初のオプションです:。

use std::collections::HashMap; 

let mut serialized = HashMap::new(); 
serialized.insert("greeting", "hello"); 
Template::render("index", &serialized) 
+0

明らかに私はひどく混乱しているようでした。 あなたが言ったように、私はHashMapで実装することができます。 しかし、それは他のエラーのためにいつも失われていました。おかげさまで –

関連する問題