4 个版本

0.1.0-alpha42023 年 1 月 1 日
0.1.0-alpha32022 年 12 月 29 日
0.1.0-alpha22022 年 12 月 28 日

#342 in 模板引擎

CC0 许可证

23KB
402

TeensyCMS

一个非常小、非常简约的 CMS,允许管理员部署您的 Web 应用程序时添加自定义页面,并通过导航栏访问它们。

使用 TeensyCMS 的典型应用程序如下所示

  • 检查其配置中的 pages_dir 变量
  • 从文件系统中的该路径加载 TeensyCMS
  • 让网站的模板使用来自 TeensyCMS 返回的值
  • 挂载单个路由,如 /pages/{tail:.*},用于渲染 TeensyCMS 内容

就是这样。

此功能的典型用例是,如果您希望管理员能够提供他们自己的页面,这些页面可能包含或不包含

  • 关于 页面
  • 联系方式 页面
  • 服务条款 页面
  • 行为准则 页面
  • 他们想要的任何其他内容,比如他们最喜欢的猫的列表

实现 TeensyCMS 的完整网站示例可以在 examples/ 目录中找到,并使用 cargo run 运行,但为了参考,一个简单的应用程序可能看起来像这样

use teensy_cms::{TeensyCms, DefaultPage};

let my_config = MyConfig::from_env();
let cms = TeensyCms::<DefaultPage>::from_config_path(&my_config.pages_config_path).unwrap();
// finish initializing the web server

// imagine some fancy routing macro that wraps this
fn handle_page_request(req: Request) -> String {
    // something like "contact" or "about"
    let page = &req.path_args()["page"];
    req.data::<TeensyCms<DefaultPage>>().unwrap()
        .render(&format!("{page}.html")).unwrap()
}

模板是从加载配置的位置加载的。配置如下所示

---
pages:
  - path: about.html
    url: /about
  - title: Submenu
    pages:
      - path: sub/page.html
        url:  sub/page

页面如下所示

---
title: My Page
cats: [Scruffles, Mx. Clawz]
---
<h1>{{ page.title }}</h1>
<ul>
  {% for cat in page.cats %}
    <li>{{ cat }}</li>
  {% endfor %}
</ul>

知识产权不是真实的。没有许可证。如果您坚持要有一个,这是 Creative Commons Zero(公共领域)。

依赖关系

~9–18MB
~246K SLoC