Crates.io | teensy-cms |
lib.rs | teensy-cms |
version | 0.1.0-alpha6 |
source | src |
created_at | 2022-12-28 16:57:23.127316 |
updated_at | 2024-10-29 10:13:47.22101 |
description | A teensy CMS for embedding pages in your web app |
homepage | |
repository | https://gitlab.com/anarchist-archive/teensy-cms |
max_upload_size | |
id | 746909 |
size | 68,454 |
A very small, very minimal CMS for allowing admins deploying your web applications to add custom pages and have them accessible from a nav bar.
A typical application using TeensyCMS dos so like this:
pages_dir
variable in its config/pages/{tail:.*}
that renders TeensyCMS contentThat's it.
A typical use case for this would be if you wanted a admin to be able to provide their own pages that may or maybe not include:
About
pageContact
pageTerms of Service
pageCode of Conduct
pageA full working example of a website implementing TeensyCMS can be found in the examples/
directory and run with cargo run
, but for reference a simple app might look like this:
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()
}
Templates are loaded relative to where the config was loaded from. Configs look like this:
---
pages:
- path: about.html
url: /about
- title: Submenu
pages:
- path: sub/page.html
url: sub/page
A page looks like the following:
---
title: My Page
cats: [Scruffles, Mx. Clawz]
---
<h1>{{ page.title }}</h1>
<ul>
{% for cat in page.cats %}
<li>{{ cat }}</li>
{% endfor %}
</ul>
Intellectual property isn't real. There is no license. If you insist on having one, this is Creative Commons Zero (public domain).