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

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.3.0.tar.gz (2.9 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.3.0-py3-none-any.whl (3.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ryland-0.3.0.tar.gz
Algorithm Hash digest
SHA256 7e6da68f70ac4ec11e38d8cf4d281b818c59a92915cf764d7c30221835137612
MD5 3665d76f3c69aaf754e5906120857d62
BLAKE2b-256 f8e032f5066cb578ac0085d51cdf31441d9d7db0a0e9a9ca6393a918570ecf9e

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ryland-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 72d865b1c4ccf43939c6d8b352d345a9fb42c8f8c4b8556f2b7d69721d2a584e
MD5 78f344794563a3cdf47c58a63d97ed91
BLAKE2b-256 c2b451f82bf5baae9c8b7896ce086af41de87df10ec1aaebb75a711f6862754b

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