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 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 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)

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 }}

strftime Filter

To format a datetime:

{{ meta.date | strftime('%B %-d, %Y') }}

Data Function

To pull data directly from a JSON 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
  • add support for YAML data loading in templates
  • 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

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.6.0.tar.gz (3.1 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.6.0-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ryland-0.6.0.tar.gz
Algorithm Hash digest
SHA256 e65cd50ece8a9963997963030a33dacc66ee92e0141548e9182cdba0fd0180b6
MD5 824512a5acb5000ea83df03b30c01ad8
BLAKE2b-256 662a46e7a6219d9aea206cca1643631e57d2aa852b68516cb551982490ae74e7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ryland-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f15844d22aa340398f5feba6af78be08f881224c78a77acfa03abb28d5de526b
MD5 3c842b9c176e8939b4088e669b085baa
BLAKE2b-256 6a3eb119d0e4edc39bb1fb9a0dca5f644e20c9eb5f8fc349131ad36f9905ae11

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