#yew-component #askama #yew #component #html

yew-askama

从 Askama 模板创建 Yew 组件

1 个不稳定版本

0.1.0 2023 年 11 月 19 日

#398模板引擎

自定义许可证

7KB
60 代码行

yew-askama

这个 crate 提供了一个属性,允许您轻松地将 Askama 模板转换为 Yew 组件。

用法

这个 crate 导出了一个公共成员:名为 template_component 的过程宏属性。此宏可以应用于结构体,并且是侵入性最小的,因为它不会重新定义结构体,而是编辑它。

以下是一个例子

#[template_component]
#[template(path = "card.html")
pub struct Card {
    title: &'static str,
    content: &'static str,
}

(除了一些导入外)转换为

#[derive(askama::Template, yew::Properties, PartialEq)]
#[template(path = "card.html")
pub struct CardTemplate {
    title: &'static str,
    content: &'static str,
}

#[function_component]
pub fn Card(template: &CardTemplate) -> Html {
    let template_string = template.render().unwrap();
    let attr_value = AttrValue::from_str(template_string.as_str()).unwrap();
    
    Html::from_html_unchecked(attr_value)
}

template_component 属性需要 Askama 的 template 属性被定义。更多信息请参见 此处

注意,Askama 的 Template 特性和 Yew 的 Properties 特性都派生到同一类型。这意味着您必须考虑这两个特性的限制,例如不能使用生命周期。

限制

  • 无状态:由于组件是通过结构体定义的,目前无法在代码中从组件中运行任何代码。这不是一个固有的限制,因为这个功能可以通过实现(非常容易)来实现。
  • 不可选可见性:虽然不是紧急问题,但 Yew 组件的可见性目前无法配置。

依赖项

~11–15MB
~279K SLoC