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 模板引擎

Download history 618/week @ 2024-05-03 732/week @ 2024-05-10 447/week @ 2024-05-17 825/week @ 2024-05-24 1318/week @ 2024-05-31 1095/week @ 2024-06-07 614/week @ 2024-06-14 1624/week @ 2024-06-21 8274/week @ 2024-06-28 12360/week @ 2024-07-05 4465/week @ 2024-07-12 7686/week @ 2024-07-19 12728/week @ 2024-07-26 8513/week @ 2024-08-02 7659/week @ 2024-08-09 10956/week @ 2024-08-16

41,486每月下载量
用于 20 个crates(11个直接使用)

MIT许可证

110KB
1.5K SLoC

Rust

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 和贡献者

无运行时依赖