9个稳定版本
2.5.0 | 2024年7月2日 |
---|---|
2.4.0 | 2023年3月22日 |
2.2.0 | 2022年12月1日 |
2.1.1 | 2022年7月28日 |
1.0.0 | 2021年1月24日 |
#16 in 模板引擎
41,486每月下载量
用于 20 个crates(11个直接使用)
110KB
1.5K SLoC
build_html: Rust HTML生成
此crates允许使用Builder模式在Rust代码中生成HTML字符串。通过重复链式调用添加元素,构建HTML文档。然后将结构体刷新为字符串,可以在程序的其他地方使用。
此库生成的字符串未经格式化,但不是显式最小化。传递给字符串的空白通常会被保留。请注意,字符串转义不是自动的,尽管提供了一个执行此操作的功能。
此crates是用纯安全Rust编写的,没有生产依赖项。
use build_html::{HtmlElement, HtmlTag, Html};
let element = HtmlElement::new(HtmlTag::Div)
.with_child(
HtmlElement::new(HtmlTag::ParagraphText)
.with_child("Paragraph Text".into())
.into()
)
.with_child(
HtmlElement::new(HtmlTag::PreformattedText)
.with_child("Preformatted Text".into())
.into()
)
.to_html_string();
assert_eq!(element, "<div><p>Paragraph Text</p><pre>Preformatted Text</pre></div>");
此库的主要目的是提供一个简单的方式来构建可以注入到HTML页面或自身文件的框架中的动态元素。这种做法的优势在于,它允许您使用现代编辑器的功能(如代码检查和语法高亮)编写大部分HTML。您可以使用标准库的include_str!
宏“导入”您的HTML文件,并使用format!
宏“注入”您的新元素。
然而,如果您的页面非常简单或整个页面都是动态的,您可能希望在Rust代码中创建整个页面。为了满足这一用例,此库提供了HtmlPage
结构体。此结构体实现了HtmlContainer
接口,可以用来轻松添加内容。
use build_html::{HtmlPage, Html, HtmlContainer};
let page = HtmlPage::new()
.with_title("TITLE")
.with_paragraph("PARAGRAPH")
.to_html_string();
assert_eq!(page, concat!(
"<!DOCTYPE html><html>",
"<head><title>TITLE</title></head>",
"<body><p>PARAGRAPH</p></body>",
"</html>"
));
更复杂的示例
use build_html::*;
let html: String = HtmlPage::new()
.with_title("My Page")
.with_header(1, "Main Content:")
.with_html(
HtmlElement::new(HtmlTag::Article)
.with_attribute("id", "article1")
.with_header_attr(2, "Hello, World", [("id", "article-head"), ("class", "header")])
.with_paragraph("This is a simple HTML demo")
)
.to_html_string();
生成以下字符串
<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<h1>Main Content:</h1>
<article id="article1">
<h2 id="article-head" class="header">Hello World</h2>
<p>This is a simple HTML demo</p>
</article>
</body>
</html>
如果您正在尝试创建一个更复杂的文档,您可能会发现从 Rust 之外创建模板并将其构建到二进制文件中更简单。您可以使用宏 include_str!()
来实现这一点。然后,您可以使用宏 build_html
生成需要动态创建的部分,并用宏 format!()
插入它们。
贡献
如果您有改进这个库的想法,请随时在 GitHub 上打开一个 issue 或 pull request!我会尽量在合理的时间内回复,但请记住,维护这个库并不是我的全职工作。
致谢
以下是一些使这个项目成为可能的优秀项目
许可证
本项目采用 MIT 许可证。
版权 (C) 2020-2024 Joseph Skubal 和贡献者