Skip to main content

A simple static site generation library

Project description

Ryland

A simple static site generation library

Current Features

  • Jinja2 templates with a basic markdown filter and a function to pull data directly from JSON files
  • copying static files and directory trees (for stylesheets, scripts, fonts, images)
  • cache-busting with hashes

History

I've generally found most static site generation libraries to either be far too complex for my needs or be 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

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 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.5.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.5.0-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ryland-0.5.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.5.0.tar.gz
Algorithm Hash digest
SHA256 d8af9fb43e084d5715c4a14bcba1666d26fcc812dfbe59b9d2226ab172edb1b1
MD5 92b129980d0278e2ebef43184fa3a12c
BLAKE2b-256 3f1cdd9f5fc110044b24c8b10ccab6b9b18ed8b716980852ce88d0124eb88bf5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ryland-0.5.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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 720480e400a2e11f9ff5523d7e0b25c2d127f94977e78d582acb1511fa49cc32
MD5 f906c4d1276d44ed51390555f03c7329
BLAKE2b-256 f23a6c018ca7051d6a7c5a9d74338d2e0304e00ab26aea93ede62adca731867b

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