Code over configuration static site generator.
Project description
lightweight: a static site generator
Code over configuration.
Features
- Clean and easily extensible API
- Jinja2 templates
- Markdown rendering with YAML frontmatter
- Sass/SCSS rendering
- RSS/Atom feeds (basic implementation with ability to pass only plaintext to feeds)
- Dev server
- Site nesting
- CLI
Installation
Available from PyPI:
pip install lightweight
Quick Example
from lightweight import Site, markdown, paths, jinja, template, rss, atom, sass
def blog_posts(source):
post_template = template('posts/_template.html')
# Use globs to select files. # source = 'posts/**.md'
return (markdown(path, post_template) for path in paths(source))
def example(url):
site = Site(url)
# Render an index page from Jinja2 template.
site.include('index.html', jinja('pages/index.html'))
# Render markdown blog posts.
[site.include(f'posts/{post.source_path.stem}.html', post) for post in blog_posts('posts/**.md')]
site.include('posts.html', jinja('pages/posts.html'))
# Syndicate RSS and Atom feeds.
site.include('posts.atom.xml', atom(site['posts']))
site.include('posts.rss.xml', rss(site['posts']))
# Render SASS to CSS.
site.include('css/style.css', sass('styles/style.scss'))
# Include a copy of a directory.
site.include('img')
site.include('js')
return site
if __name__ == '__main__':
# Create a site and generate by writing all of it’s content.
example(url='https://example.org/').generate()
Create a new project
Initialize a new project using init
command:
lw init <location>
It accepts multiple optional arguments:
lw init -h
usage: lw.py init [-h] [--url URL] [--title TITLE] [--authors AUTHORS]
location
Generate Lightweight skeleton application
positional arguments:
location the directory to initialize site generator in
optional arguments:
-h, --help show this help message and exit
--url URL the url of the generated site
--title TITLE the title of of the generated site
--authors AUTHORS comma-separated list of names
Dev Server
Lightweight includes a simple static web server with live reload serving at localhost:8080
:
lw serve site:dev
Here site
is a Python module
Host and port can be set via:
lw serve site:dev --host 0.0.0.0 --port 80
The directory to resolve the module is provided as --source
. It defaults to cwd.
The source directory is watched for live reload.
lw serve site:dev --source ~/Projects/example
The live reload can be disabled with --no-live-reload
flag:
lw serve site:dev --no-live-reload
Otherwise every served HTML file will be injected with a javascript that polls /__live_reload_id__
.
The script reloads the page when value at that location changes.
That happens after regenerating the site upon change in --source
directory.
To stop the server press Ctrl+C
in terminal.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for lightweight-1.0.0.dev38-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 644cc1eff201d82a6e675bf7e375b4dccd04ecd1d3f1f93fcc2ed8a9959e5949 |
|
MD5 | 19fe5260216d12a0c121b0fd0ca75d0f |
|
BLAKE2b-256 | f49e2f7dfea6307712f22804bc8bb4545f7182f7b91c789b250ba388e50c4a05 |