Skip to main content

A simple static site generation library

Project description

Ryland

A simple static site generation library

Current Features

  • use of Jinja2 templates
  • markdown formatting filter
  • pull data directly from JSON or YAML files within templates
  • copy static files and directory trees (for stylesheets, scripts, fonts, images)
  • cache-busting with hashes

History

I've generally found most static site generators to either be far too complex for my needs or too restricted to just blogs or similar so, over the years, I've generated many static sites with lightweight, bespoke Python code and hosted them on GitHub pages. However, I've ended up repeating myself a lot so I'm now cleaning it all up and generalizing my prior work as this library.

Changelog

0.1.0

  • initial release

0.2.0

  • added the data function with support for JSON

0.3.0

  • changed dist to output
  • changed calc_hash to add_hash
  • support just passing in __file__ and assuming output_dir and template_dir
  • added an example

0.4.0

  • clear_output will create the directory if it doesn't exist
  • added another example

0.5.0

  • added strftime filter
  • include markdown-full-yaml-metadata
  • added a third example

0.6.0

  • removed strftime filter (can just use .strftime instead)

0.7.0

  • data function now supports YAML
  • added two examples of the data function

Example Usage

pip install ryland (or equivalent).

The write a build script of the following form:

from ryland import Ryland

ROOT_DIR = Path(__file__).parent.parent
OUTPUT_DIR = ROOT_DIR / "output"
PANTRY_DIR = ROOT_DIR / "pantry"
TEMPLATE_DIR = ROOT_DIR / "templates"

ryland = Ryland(output_dir=OUTPUT_DIR, template_dir=TEMPLATE_DIR)

ryland.clear_output()
ryland.copy_to_output(PANTRY_DIR / "style.css")
ryland.add_hash("style.css")

ryland.render_template("404.html", "404.html")
ryland.render_template("about_us.html", "about-us/index.html")

# construct context variables

ryland.render_template("homepage.html", "index.html", {
    # context variables
})

Also see examples/ in this repo.

Cache-Busting Hashes

The add_hash makes it possible to do

<link rel="stylesheet" href="/style.css?{{ HASHES['style.css'] }}">

in the templates to bust the browser cache when a change is made to a stylesheet, script, etc.

markdown Filter

To render a markdown context variable:

{{ content | markdown }}

Data Function

To pull data directly from a JSON or YAML file in a template:

<div>
  <h2>Latest News</h2>

  {% for news_item in data("news_list.json")[:3] %}
    <div>
      <div class="news-dateline">{{ news_item.dateline }}</div>
      <p>{{ news_item.content }}</p>
    </div>
  {% endfor %}
</div>

Sites Currently Using Ryland

Roadmap

In no particular order:

  • move over other sites to use Ryland
  • incorporate more common elements that emerge
  • improve error handling
  • produce a Ryland-generated website for Ryland
  • document how to automatically build with GitHub actions
  • write up a cookbook
  • add a command-line tool for starting a Ryland-based site

Because Ryland is a library, a lot of missing features can just be implemented by the site developer. However, if three or more sites duplicate effort in their build script, I'll consider at least adding helper code to Ryland.

Once five independent people are running sites built with Ryland, I will declare 1.0.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ryland-0.7.0.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ryland-0.7.0-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file ryland-0.7.0.tar.gz.

File metadata

  • Download URL: ryland-0.7.0.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for ryland-0.7.0.tar.gz
Algorithm Hash digest
SHA256 af4c7af7c979fffffd915405a0dfc4991dd3511568f9250e995b8fa375600fc1
MD5 118b4c949e508b8cbfa86b2f712ea344
BLAKE2b-256 fcc1fd366f8464ceab2e9c3a6921f123e59a8a1658057ecf449149e64ad3ded6

See more details on using hashes here.

File details

Details for the file ryland-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: ryland-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 4.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for ryland-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 64df497f90fb6f70a816e5b0602226afb19ceaa9a24d7bc17215686aef1582b3
MD5 7f7dcf8a53f9dfae984636ab3a39b0ac
BLAKE2b-256 f86067bedbb0e9d62555a6d2c41c2395b4421581ae7b0436ad135d9fc160f1fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page